2.SharedPreferences存储
SharedPreferences是使用键值对的方式来存储数据的。
也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。
而且SharedPreferences还支持多种不同的数据类型存储,
如果存储的数据类型是整型,那么读取出来的数据也是整型的;
如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。
SharedPreferences文件都是存放在 /data/data/<package name>/shared_prefs/
目录下的。
2.1 获取SharedPreferences
有3个方法
-
context
类中的getSharedPrefences()
方法
此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下的。第二个参数用于指定操作模式,目前只有MODE_PRIVATE这一种模式可选,它是默认的操作模式,和直接传入0效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。其他几种操作模式均已被废弃 -
Activity
类中的getSharedPrefences()
方法
这个方法和Context中的getSharedPreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名。 -
PreferenceManager
类中的getSharedPrefences()
方法 (已废弃)
这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。得到了SharedPreferences对象之后,
2.2 SharedPreferences文件中存储数据
开始向SharedPreferences文件中存储数据了,主要可以分为3步实现。
- (1) 调用 SharedPreferences 对象的 edit()方法来获取一个SharedPreferences.Editor 对象。
- (2) 向 SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString()方法,以此类推。
- (3) 调用 apply()方法将添加的数据提交,从而完成数据存储操作。
Button btn_save = findViewById(R.id.btn_save);
btn_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = getSharedPreferences("my_shared_pres", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("name", "Kevin");
editor.putInt("age",29);
editor.putBoolean("married", false);
editor.apply();
}
});
}
进入/data/data/com.example.sharedpreferencestest/shared_prefs/目录下,可以看到生成了一个
my_shared_pres.xml`文件,
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="married" value="false" />
<string name="name">Kevin</string>
<int name="age" value="29" />
</map>
执行修改 editor.putInt("age",28);
后:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="married" value="false" />
<string name="name">Kevin</string>
<int name="age" value="28" />
</map>
2.3 从SharedPreferences文件中读取数据
Button btn_restore = findViewById(R.id.btn_restore);
btn_restore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = getSharedPreferences("my_shared_pres", MODE_PRIVATE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age",0);
boolean married = sharedPreferences.getBoolean("married", false);
Toast.makeText(MainActivity.this,
"name:" +name +"age:" + age + "married:" + String.valueOf(married),
Toast.LENGTH_SHORT )
.show();
}
});