Android——数据存储(二)(SharedPreferences存储)

SharedPreferences存储

SharedPreferences是使用键值对的方式来存储数据的。当保存一条数据时,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences还支持多种不同的数据类型存储,存储的数据是什么类型,读取出来也是什么类型。保存的数据是用XML格式进行管理的。SharedPreferences文件都是存放在/data/data/<package name>/shared_prefs/目录下的;

 

而且一个SharedPreferences对象只有一个实例返回给同名的调用者,这意味着它们将在编辑完成后立即看到彼此的编辑。

 

使用SharedPreferences要先获取它的实例,Android中主要提供了3中方法用于得到SharedPreferences对象。

 

  • Context类中的getSharedPreferences(String name,int mode)方法:这个方法有两个参数,第一个参数用于指定要储存数据的SharedPreferences文件名;第二个参数用于指定操作模式,现在可以的只有填0或者MODE_PRIVATE,他们的效果是一样的,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写,还有三个模式已经不推荐使用了,分别是MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE和MODE_MULTI_PROCESS。
  • Activity类中的getPreference(int mode)方法:这个方法只有一个接收操作模式的参数,操作模式和Context类中的getSharedPreferences方法中的操作模式一样,没有文件名参数是因为这个方法会自动将当前活动的类名作为SharedPreferences文件的文件名。
  • PreferenceManager类中的getDefaultSharedPreference(Context context)方法:这是一个静态方法,只有一个上下文参数,会自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。不过这个方法已经在Android 10被废弃了,不建议使用了。

 

获取到SharedPreferences对象后,如果要存储数据,则需要调用SharedPreferences对象的edit()方法获取一个编辑器SharedPreferences.Editor对象,用于修改SharedPreferences对象中的值的接口。用putString()、putInt()、putBoolean()等这种方法来向SharedPreferences.Editor对象中添加键值对数据,这些方法都有两个参数,第一个是参数是键,即要存放数据的名字,第二个参数是要存放的值。最后再调用apply()方法将添加的数据提交就可以了,这样就完成了数据存储操作。

 

扫描二维码关注公众号,回复: 11387236 查看本文章

如果要取出存储的数据,则获得要读取的SharedPreferences对象的实例后,再调用相应的getString()、getInt()、getBoolean()等方法就可以了,这些get方法也要传两个参数,第一个参数和put方法一样,为要取出数据的键,即名字;第二个参数是默认值,即表示当传入的键找不到对应的值时会返回默认值。

 

存入代码:

 

SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","tom");
editor.putInt("age",18);
editor.apply();

读出代码:

SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");
int age = pref.getInt("age",0);

参考Android帮助文档注意:这个类提供了强一致性保证。它使用了昂贵的操作,可能会降低应用程序的运行速度。经常改变属性或者可以容忍损失的属性应该使用其他机制。

 

SharedPreferences.Editor接口还提供了一些其他方法:

 

  • clear():是把之前提交后保存的所有信息全部进行清空,同一次提交进行的操作如果含有clear()操作,则先执行clear()再执行其他,与代码前后顺序没有关系。
  • commit():和apply()方法作用差不多,不过这个会有返回值,写入成功返回true,失败返回false。但是更推荐使用apply()方法,因为apply() 方法进行提交会先将数据写入内存,然后异步写入磁盘,commit()方法是直接写入磁盘。如果频繁操作的话 apply() 的性能会优于 commit(),apply()会将最后修改内容写入磁盘。但是如果希望立刻获取存储操作的结果,并据此做相应的其他操作,应当使用 commit()。
  • remove(String key):传入要删除数据的键,然后再提交后进行实际删除。

猜你喜欢

转载自www.cnblogs.com/mulin1999/p/13205837.html