SharedPreferences用来进程间共享数据,它只能存储简单数据类型(int、boolean、String 等),
复杂数据类型建议使用文件、数据库等其他方式存储。
它的一般使用方法:
存数据:
SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("name", "lala");
editor.putInt("age", 18);
editor.putBoolean("man", true);
editor.apply();
取数据:
SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
String name = sp.getString("name", "aaa");
int age = sp.getInt("age", 0);
boolean man = sp.getBoolean("man", false);
清除数据;
SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
注意:
1. 上面用到的是Context类的getSharedPreferences()方法,需要传入文件名和操作模式,默认为0也就是MODE_PRIVATE。
获取SharedPreferences还有两种方法:Activity类的getPreferences()方法,和PreferenceManager类的静态方法getDefaultSharedPreferences()。前者会自动将当前类名作为文件名,只需要传入操作模式。后者需传入context,并自动使用包名作为前缀来命名SharedPreferences文件。
2.提交SharedPreferences数据时,可以用SharedPreferences.Editor的commit()方法,也 可以用它的apply()方法。两者有什么区别呢,下面的解释来自《阿里巴巴Android开发手册》:
SharedPreference 提 交 数 据 时 , 尽 量 使 用 Editor#apply()
,而非Editor#commit()。一般来讲,仅当需要确定提交结果,并据此有后续操作时,才使用 Editor#commit()。
说明:
SharedPreference 相关修改使用 apply 方法进行提交会先写入内存,然后异步写入磁盘,commit
方法是直接写入磁盘。如果频繁操作的话 apply 的性能会优于 commit,apply会将最后修改内容写入磁盘。
但是如果希望立刻获取存储操作的结果,并据此做相应的其他操作,应当使用 commit。
正例:
public void updateSettingsAsync() {
SharedPreferences mySharedPreferences = getSharedPreferences("settings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putString("id", "foo");
editor.apply();
}
public void updateSettings() {
SharedPreferences mySharedPreferences = getSharedPreferences("settings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mySharedPreferences.edit();
editor.putString("id", "foo");
if (!editor.commit()) {
Log.e(LOG_TAG, "Failed to commit setting changes");
}
}
反例:
editor.putLong("key_name", "long value");
editor.commit();