不同于之前的文件存储方式,SharedPreferences是使用键值对来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候,就可以通过这键来把相应的值取出来。而且SharedPreferences还支持多种不同方式的数据类型存储了如果存储的数据是整型,那么在读取时获得的也是整型;如果存储的数据是一个字符串的话,那么读取出来的数据就是字符串。
1.将数据存储到SharedPreferences中
要想使用SharedPreferences来存储数据,首先需要获取到SharePreferences对象。Android中主要提供三种方式用于得到SharedPreferences的对象
(1)Context类中的getSharedPreferences()方法
getSharedPreferences(String name, int mode),此方法接收两个参数。第一个参数是指定SharedPreferences的文件名称,如果指定的文件不存在的话,则会创建一个SharedPreferences文件,SharedPreferences文件都是存放在/data/data/<应用包名>/share_prefs/目录下;第二个参数指定操作模式,目前只有MODE_PRIVATE模式,其余的模式由于过于危险,因此被废弃了。
(2)Activity类中的getSharedPreferences()方法
这个方法和Context中的getSharePreferences()方法相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类型作为SharePreferences的文件名。
(3)PreferencesManager类中的getDefaultSharedPreferences()方法
这是一个静态方法,它接收一个Context类型的参数,并且自动调用当前应用程序的包名作为前缀来命名SharedPreferences文件。
emsp;获得SharePreferences的对象后,就可以向SharedPreferences文件中来存储数据了,主要分为3步实现:
(1)调用SharePreferences对象的edit()方法来获取一个SharePreferences.Editor对象。
(2)向SharedPreferences.Editor对象中添加数据,比如添加一个boolean类型的数据,调用putBoolean()方法,添加一个字符串,调用putString()方法。
(3)调用apply()方法或者是commit()方法来对添加的数据进行提交。
2.从SharePreferences中读取数据
SharedPreferences对象中提供一系列的get方法,用来存储的数据进行读取,每一中get方法对相应SharePreferences.Editor的一种put方法。这些get方法都接收两个参数,第一个参数是数据对应的key值,第二个参数是默认值,即当传入的键找不到对应的值时,给一个默认值。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/id_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存" />
<Button
android:id="@+id/id_load"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加载" />
<TextView
android:id="@+id/id_textView"
android:textSize="30sp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="100dp" />
</LinearLayout>
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mButtonSave = null;
private Button mButtonLoad = null;
private TextView mTextView = null;
private SharedPreferences sharedPreferences = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButtonSave = (Button) findViewById(R.id.id_save);
mButtonSave.setOnClickListener(this);
mButtonLoad = (Button) findViewById(R.id.id_load);
mButtonLoad.setOnClickListener(this);
mTextView = (TextView) findViewById(R.id.id_textView);
sharedPreferences = getSharedPreferences("pby", MODE_PRIVATE);
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.id_save:
{
save();
break;
}
case R.id.id_load:
{
load();
break;
}
}
}
private void save()
{
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("name", "pby");
editor.putInt("age", 21);
editor.commit();
}
private void load()
{
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);
mTextView.setText("名字:" + name + "\n年龄:" + age);
}
}
效果示意图: