不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。也就是说当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且 SharedPreferences还支持多种不同的数据类型存储, 如果存储的数据类型是整型,那么读取出来的数据也是整型的,存储的数据是一个字符串, 读取出来的数据仍然是字符串。
要想使用SharedPreferences来存储数据,首先需要获取到SharedPreferences对象。Android 中主要提供了三种方法用于得到 SharedPreferences对象。
- Context类中的 getSharedPreferences()方法
此方法接收两个参数,第一个参数用于指定 SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences 文件都是存放在/data/data//shared_prefs/目录下的。第二个参数用于指定操作模式,目前只有MODE_PRIVATE这一种操作模式,和直接传入 0 效果是相同的,表示只有当前的应用程序才可以对这个 SharedPreferences文件进行读写。 - Activity类中的 getPreferences()方法
这个方法和 Context中的 getSharedPreferences()方法很相似,不过它只接收一个操 作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences的文件名。 - PreferenceManager类中的 getDefaultSharedPreferences()方法
这是一个静态方法,它接收一个 Context参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences文件。
**得到了SharedPreferences对象之后,就可以开始向SharedPreferences文件中存储数据了, 主要可以分为三步实现。 ** - 调用 SharedPreferences对象的 edit()方法来获取一个 SharedPreferences.Editor对象。
- 向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用 putBoolean方法,添加一个字符串则使用 putString()方法,以此类推。
- 调用 apply()方法将添加的数据提交,从而完成数据存储操作。
新建一个SharedPreferencesTest项目,然后修改activity_main.xml 中的代码,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/save_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
android:text="save data"/>
<Button
android:id="@+id/restore_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
android:text="Restore data"/>
</LinearLayout>
地放置了两个按钮,一个用于将一些数据存储到 SharedPreferences文件当中。一个用于将数据读出来,然后修改 MainActivity中的代码,如下所示
package com.example.sharedpreferencestest;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.save_data);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
//放数据时putXXX()方法第一个参数时你自己定义的键值,第二个参数时你输入的内容
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.apply();
}
});
Button button1 = findViewById(R.id.restore_data);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
//得到数据时getXXX()方法第一个参数时你自己定义的键值,第二个参数是你读取数据的默认值,假如你要读取的数据没有储存,那么就会赋值你输入的默认值。
String name = preferences.getString("name", "");
int age = preferences.getInt("age", 0);
boolean married=preferences.getBoolean("married",false);
Log.d("MainActivity","name is "+name);
Log.d("MainActivity","age is "+age);
Log.d("MainActivity","marrier is "+married);
}
});
}
}
最简单的SharedPreferences存储就搞定了。