数据存储之SharedPreferences
- 默认存储在/data/data/包名/shared_prefs/文件名
- 基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息等较简单的数据类型
常用的文件的操作模式
MODE_PRIVATE: 默认的操作,表示只有当前应用程序才可以对SharedPreferences文件读写。
MODE_MULTI_PROCESS 一般用于会有多个进程中对同一个SharedPreferences文件进行读写的情况。
实现SharedPreferences存储的步骤
- 获取SharedPreferences对象
- 调用SharedPreferences对象的edit()方法获取SharedPreferences.Editor对象
- 向SharedPreferences.Editor对象中添加数据,使用putXXX()方法
- 调用commit()提交数据,完成数据存储
添加数据的putXXX()类型方法具体有:
putString(String key, @Nullable String value)
putStringSet(String key, @Nullable Set values)
putInt(String key, int value)
putLong(String key, long value)
putFloat(String key, float value)
putBoolean(String key, boolean value)
Editor下的其他方法:
remove(String key) 移除preferences中的某一key值对应的数据
clear() 清除preferences中的所有数据
commit() 提交数据
获取SharedPreferences对象的几种方法
1.Context类中的getSharedPreferences()方法
//Context类中这样定义的,传入参数为(文件名,操作模式)
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
//调用
SharedPreferences sp = this.getSharedPreferences("config", MODE_PRIVATE);
2.Activity类中的getPreferences()方法
//Activity类这样定义,只需要传入操作模式,使用这个方法会自动把当前活动的类名作为SharedPreferences的文件名
public SharedPreferences getPreferences(int mode) {
return getSharedPreferences(getLocalClassName(), mode);
}
//调用
SharedPreferences sp=getPreferences(MODE_PRIVATE);
3.使用PreferenceManager类中的getDefaultSharedPreferences()方法
//PreferenceManager类中这样定义,这是一个静态方法,接收一个Context参数,
并自动把当前应用程序的包名作为前缀来命名SharedPreferences文件
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
//调用
SharedPreferences sp=PreferenceManager.getDefaultSharedPreferences(this);
使用adb命令查看SharedPreferences文件
root@android:/data/data/com.example.datastore # cd shared_prefs
cd shared_prefs
root@android:/data/data/com.example.datastore/shared_prefs # ls
ls
config.xml
root@android:/data/data/com.example.datastore/shared_prefs # cat config.xml
nfig.xml <
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="item">SharedPreferences</string>
</map>
Editor为SharedPreferences文件的编辑器,有以下几种方法:
putString(String key, @Nullable String value)
putStringSet(String key, @Nullable Set values)
putInt(String key, int value)
putLong(String key, long value)
putFloat(String key, float value)
putBoolean(String key, boolean value)
remove(String key)
clear()
在Editor中标记以从首选项中删除所有值。一旦commit被调用,唯一剩余的首选项将是你在这个编辑器中定义的任何一个
commit()
提交Editor编辑的内容
存储数据
使用Editor对象添加值
SharedPreferences sp = this.getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("item", data);
...
editor.commit();
读取数据
使用sp对象来获取值
从首选项中检索所有值
Map<String, ?> getAll();
从首选项中检索字符串值
@Nullable
String getString(String key, @Nullable String defValue);
从首选项中检索一组String值
@Nullable
Set<String> getStringSet(String key, @Nullable Set<String> defValues);
从首选项中检索一个int值
int getInt(String key, int defValue);
从偏好中检索一个long值
long getLong(String key, long defValue);
从首选项中检索浮点值
float getFloat(String key, float defValue);
从首选项中检索布尔值
boolean getBoolean(String key, boolean defValue);
代码调用
SharedPreferences sp = this.getSharedPreferences("config", MODE_PRIVATE);
sp.getString("item", "data is null")//key值,默认值
sp.getXXX...