使用场景:
应用程序有少量的数据需要保存,而这些数据的格式很简单,都是普通的字符串,标量类型值等,比如:应用程序的各种配置信息(是否打开音效,是否使用振动),小游戏玩家的积分等。
SharedPreference 的存储位置和格式:
存储位置:/data/data/<package name>/shared_prefs目录下
存储格式:以xml格式保存,根元素是<map...../>,该元素里面每个子元素代表一个key_value对,当是整数类型时,使用<int../>子元素,当是字符串类型时,使用<string..../>以此类推。
SharedPreference 接口的常用方法。
>读出:
contains("key"):判断是否包含指定键的值
getAll():获取SharedPreference中存储的所有键值对,返回一个map集合
getXxx(String key,value):获取指定键所对应的值。
>写入:
注意:SharedPreference 本身并没有写入数据的能力,而是通过它的内部接口Editor对象来写入的。调用它的edit()方法,即可得到这个内部对象。
SharedPreferences.Editor edit():获得Editor的实例对象
putXxx(String key,xxx value):向SharedPreference 中存入指定key对应的值,其中Xxx可以是boolean ,int ,long,String 等基本类型。
remove(String key):删除SharedPreference中的指定Key对应的值。
clear():清空所有数据。
commit():当Editor编辑完成之后调用该方法修改。
SharedPreference 获取实例的方法
1:调用Context对象的getSharedPreferences()方法
2: 调用Activity对象的getPreferences()方法
两种方式的区别:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.
SharedPreferences的四种操作模式:
Context.MODE_PRIVATE
Context.MODE_APPEND
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件,在Android 4.2开始不推荐使用这两种模式,因为容易导致安全漏洞。.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
使用demo:
//读取设置信息,根据设置信息来进行相关逻辑操作
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);// config为sp名,而autoupdate为sp中存的值的名字
if (sp.getBoolean("autoupdate", false)) {
checkVersion();
} else {
IntentUtils.startActivityForDelayAndFinish(SplashActivity.this,
HomeActivity.class, DELAY_TIME);
}
//写入设置信息
//scv是一个带有单选框的一个自定义组件。
public void onClick(View v) {
Editor edit=sp.edit();//获得Editor对象
if(scv.isChecked()){//如果单选框是选中状态
scv.setChecked(false);//再次点击,取消选中
edit.putBoolean("autoupdate", false);//将值保存到ShredPreferences中
}else{
scv.setChecked(true);
edit.putBoolean("autoupdate", true);
}
edit.commit();//提交
}
以上为个人总结知识点,如有错,欢迎各位大牛批评指正,给予指导。