首页 > 代码库 > 使用SharedPreferences进行数据存储

使用SharedPreferences进行数据存储

很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。

对于软件配置参数的保存,如果是Windows软件通常我们会采用ini文件进行保存;

如果是j2se,我们会采用properties属性文件或者xml进行保存;

如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?

Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。

使用SharedPreferences保存数据,其背后使用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。

 

保存参数&回显参数:

1.实现布局:

技术分享

代码—actvity_main.xml:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:orientation="vertical"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     >
 6 
 7     <TextView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="@string/name" />
11     
12     <EditText
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:id="@+id/name" />
16     
17     <TextView
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         android:text="@string/age" />
21     
22     <EditText
23         android:layout_width="match_parent"
24         android:layout_height="wrap_content"
25         android:numeric="integer"
26         android:id="@+id/age" />
27     
28     <Button 
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:text="@string/button"
32           android:onClick="save"
33         />
34 
35 </LinearLayout>

string.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3 
 4     <string name="app_name">软件参数设置</string>
 5     <string name="hello_world">Hello world!</string>
 6     <string name="name">姓名</string>
 7     <string name="age">年龄</string>
 8     <string name="button">保存参数</string>
 9     <string name="success">保存完成</string>
10 
11 </resources>

2.通过建立一个业务类实现保存和获取数据的功能—PreferencesServiceservice.java:

 1 package cn.itcast.service;
 2 
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 
 6 import android.content.Context;
 7 import android.content.SharedPreferences;
 8 import android.content.SharedPreferences.Editor;
 9 
10 
11 public class PreferencesServiceservice {
12     private Context context;
13     
14     public PreferencesServiceservice(Context context) { 
15         this.context = context;
16     }
17 
18     public void save(String name, Integer age) {
19         //由于我们采用SharedPreferences来保存参数,所以首先获得SharedPerences这个类型的对象
20         //这个类型的对象的取得,我们要通过上下文对象来得到,所以首先引入上下文对象
21         //上下文对象我们通过构造器传入进来,然后在此处调用上下文对象中的getSharedPreferences()
22         SharedPreferences preferences = context.getSharedPreferences("itcast", Context.MODE_PRIVATE);//文件名称(不要后缀),操作模式
23         //得到了这个对象后,我们就可以利用它提供的API向里面存放数据了
24         //先取得编辑器后,通过编辑器对象存放数据
25         Editor editor = preferences.edit();
26         //然后调用它的常用类型put方法,往servePreference里面存放数据
27         editor.putString("name",name);
28         editor.putInt("age",age);
29         //目前这两项参数是保存在内存中的,还没有真正的保存在文件中
30         editor.commit();//提交方法,把内存中存放的数据,提交回文件中,完成数据的保存
31     }
32     
33     //获取SharedPreferences保存的参数
34     //再定义一个业务
35     /**
36      * 获取各项配置参数
37      * @return
38      */
39     public Map<String,String> getPreferences()
40     {
41         Map<String,String> params = new HashMap<String,String>();
42         //首先取得SharedPreferences 的对象
43         SharedPreferences preferences = context.getSharedPreferences("itcast", Context.MODE_PRIVATE);
44         params.put("name", preferences.getString("name", ""));
45         params.put("age", String.valueOf(preferences.getInt("age", 0)));
46         return params;
47     }
48 }

3.在主活动中调用该保存和回显参数的功能—MainActivity.java:

 1 package cn.itcast.setting;
 2 
 3 import java.util.Map;
 4 
 5 import cn.itcast.service.PreferencesServiceservice;
 6 import android.app.Activity;
 7 import android.os.Bundle;
 8 import android.view.Menu;
 9 import android.view.MenuItem;
10 import android.view.View;
11 import android.widget.EditText;
12 import android.widget.Toast;
13 
14 public class MainActivity extends Activity {
15     private EditText nameText;
16     private EditText ageText;
17     private PreferencesServiceservice service;
18 
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23         nameText = (EditText)this.findViewById(R.id.name);
24         ageText = (EditText)this.findViewById(R.id.age);
25         
26         service = new PreferencesServiceservice(this);
27         //回显代码
28         Map<String,String> params = service.getPreferences();
29         nameText.setText(params.get("name"));
30         ageText.setText(params.get("age"));
31     }
32 
33     public void save(View v)
34     {
35         String name = nameText.getText().toString();
36         String age = ageText.getText().toString();
37         //点击按钮要保存参数,保存参数的过程就是业务处理的过程
38         //所以我们应该把这段代码写在service层,所以我们写一个类叫做参数service类
39 //        PreferencesServiceservice service = new PreferencesServiceservice(this);
40         service.save(name,Integer.valueOf(age));
41         Toast.makeText(getApplicationContext(), R.string.success, 1).show();
42     }
43 
44 }

 

注解:

因为SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,

后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有4种操作模式。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,

可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

另外,Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

 

使用SharedPreferences进行数据存储