SharedPreferences用于保存简单的基本类型的数据,比如字符串,整数等,与Map十分相似,都是使用key-value对来存储和获取数据,SharedPreferences本身就是一个接口,无法直接创建SharedPreferences的实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名,第二个参数具体如下:
Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。
Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但不能写。
Context.MODE_WORLD_WRITEABLE: 指定该数据能被其他应用程序读,写
获取
SharedPreferences的方法如下:
SharedPreferences preferences;
preferences = getSharedPreferences(FILE_NAME,MODE_PRIVATE);
写入数据:
SharedPreferences接口本身并没有提供写入数据的能力,而是通过SharedPreferences的内部接口,SharedPreferences调用edit()方法即可获取它所对应的Editor对象。Editor提供了如下方法来向SharedPreferences写入数据。
SharedPreferences.Editor clear():清空SharedPreferences里所有数据。
SharedPreferences.Editor putxxx(String key,xxx value):用于添加键值对,这里的xxx可以是Boolean,float,interesting,String等各种基本类型的值
SharedPreferences.Editor remove(String key):删除key对应的数据。
boolean commit():提交
例如,我们通过按钮点击来存储一个int类型的数据:
SharedPreferences.Editor editor;//声明edit
editor = preferences.edit();//获取对象
Button write = (Button) findViewById(R.id.write);//绑定按钮
write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editor.putInt("age",20);
editor.commit();
}
});
读取数据:
SharedPreferences寻找键来读取对应的数据,与Map的读取方式基本相同,主要的方法有:
boolean contains(String key):判断是否包含特定key的数据。
abstract Map<String,?> getAll():获取全部的key-value对。
boolean getxxx(String key,xxx defValue):获取指定key的数据,如果key不存在,则返回defValue。
我们通过另外一个按钮点击获取刚刚存过的数据:
read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int age = preferences.getInt("age",0);//若age不存在,值为0;
String result = age+"";
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
});
最后,附上完整代码
public class MainActivity extends AppCompatActivity {
private String FILE_NAME = "file_name";
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences(FILE_NAME,MODE_PRIVATE);
editor = preferences.edit();
Button write = (Button) findViewById(R.id.write);
Button read = (Button) findViewById(R.id.read);
write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editor.putInt("age",20);
editor.commit();
}
});
read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int age = preferences.getInt("age",0);
String result = age+"";
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
});
}
}