程序中处理的大部分问题都与数据有关,读取数据显示在UI上,读取的数据可以是本地的,也可以是网络的。保存用户数据到存储空间,可以是本地的数据库,文件等,也可以是保存到网络服务器。总之大部分的程序都是在和数据打交道。Android中数据保存比较方便灵活,今天就按照官网说说数据保存。
大多数Android应用程序都需要存储数据,在Android生命周期方法onPause中,你可以保存用户在程序中的进度数据,在用户再次进入程序时进行读取恢复。可能一些应用程序不需要保存用户的进度信息,但是用户对于应用程序的设置信息一定要保存。很多应用需要保存大量的数据到数据库或者文件里,比如看电视的应用,需要保存大量的频道信息。下面就给大家介绍一下在Android中数据是如何保存的。
如果你有一些相对较少的键值数据集需要保存,那么SharedPreferences应该能够满足你。一个SharedPreferences对象指向了一个键值对形式保存数据的Shared Preference文件,它提供了一些很方便读取和写入数据的方法。每一个SharedPreferences文件都被Android framework管理,可以是只能创建它的应用程序访问,也可以分享给其他应用程序。怎么用SharedPreferences·保存数据呢?
你可以创建一个新的Shared Preference 共享文件,如果已经存在则直接返回指向该共享文件的SharedPreferences该对象,有两种方法可以完成这个工作:
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key),Context.MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
注意:当你创建SharedPreferences时mode值的是MODE_WORLD_PRIVATE或者MODE_WORLD_WRITEABLE,你创建的Shared Preferences文件是可以被其他应用程序访问的。这两种mode都是比较危险的,因为其他应用程序也能访问,所以会造成数据外泄。google给出的建议是尽量不要用这种机制来进行数据共享传递,可以用其他方法来代替这种机制,比如使用ContentProvider,BroadcastReceiver或者Service。
写入数据到Shared Preferences是通过获取SharedPreferences.Editor对象,调用该对象的一些putXX(key,value)方法来写入key对应的值,然后调用commit()方法提交写入完成的,代码如下:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); editor.commit();
注意:commit()和apply()都是提交对数据的操作,但是它们还是有些区别的:1、commit方法有返回值,返回值是一个boolean变量,表示你的保存动作是否成功,apply是没有返回值的,所以如果你不需要返回值,也不关心提交是否成功可以用apply来代替commit;2、apply是先把数据更改提交到内存,然后再异步保存到磁盘上,而commit这两个操作是同步的,所以在进行频繁提交数据更改时apply更为高效;
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
以上就是利用SharedPreferences进行数据保存的知识,基本上包含了所有使用SharedPreferences的方法和注意事项,有哪些地方写的不好还请大神们批评指正。
本文属原创,转载请注明出处,违者必究
关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。