不同于文件存储的方式,SharedPreferences 是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键吧相应的值取出来。
而且SharedPreferences还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读出来的数据也是整型的;如果存储的数据是字符串,那么读取出来的数据仍然是字符串。
这样你应该就能明显地感觉到,使用 SharedPreferences来进行数据持久化要比使用文件方便很多,下面我们就来看一下它的具体用法吧。
将数据存储到 SharedPreferences 中
要想使用SharedPreferences来存储数据,首先需要获取到SharedPreferences对象。Android中主要提供了三种方法用于得到 SharedPreferences 对象。
1. Context 类中的 getSharedPreferences()方法
此方法接收两个参数,第一个参数用于指定 SharedPreferences文件的名称,如果指
定的文件不存在则会创建一个,SharedPreferences 文件都是存放在/data/data//shared_prefs/目录下的。第二个参数用于指定操作模式,主要有两种模式可以选
择,MODE_PRIVATE 和 MODE_MULTI_PROCESS。MODE_PRIVATE 仍然是默认的操
作模式,和直接传入 0 效果是相同的,表示只有当前的应用程序才可以对这个
SharedPreferences文件进行读写。MODE_MULTI_PROCESS则一般是用于会有多个进程中
对同一个 SharedPreferences文件进行读写的情况。类似地,MODE_WORLD_READABLE
和 MODE_WORLD_WRITEABLE 这两种模式已在 Android 4.2 版本中被废弃。
2. Activity 类中的 getPreferences()方法
这个方法和 Context 中的 getSharedPreferences()方法很相似,不过它只接收一个操
作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文
件名。
3. PreferenceManager 类中的 getDefaultSharedPreferences()方法
这是一个静态方法,它接收一个 Context 参数,并自动使用当前应用程序的包名作
为前缀来命名 SharedPreferences 文件。
得到了 SharedPreferences对象之后,就可以开始向 SharedPreferences文件中存储数据了,
主要可以分为三步实现。
- 调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。
- 向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用
putBoolean 方法,添加一个字符串则使用 putString()方法,以此类推。 - 调用 commit()方法将添加的数据提交,从而完成数据存储操作。
新建一个 SharedPreferencesTest项目,然后修改 activity_main.xml
中的代码,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
``<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save data"
/>
</LinearLayout>`
然后修改 MainActivity 中的代码,如下所示:
public class MainActivity extends Activity {
private Button saveData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
saveData = (Button) findViewById(R.id.save_data);
saveData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data",
MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();
}
});
}
}
可以看到,这里首先给按钮注册了一个点击事件,然后在点击事件中通过
getSharedPreferences()方法指定SharedPreferences的文件名为data,并得到了SharedPreferences.Editor对象。接着向这个对象中添加了三条不同类型的数据,最后调用 commit()方法进行提交,从而完成了数据存储的操作。