Android本地存储和SharedPreferences

本地IO

Context类提供的应用内部基本文件和目录处理方法如下。

File getDir(String name, int mode)                     //获取/data/data/<包名>/目录的子目录(如果不存在就先创建它)。
File getFilesDir()                                     //获取/data/data/<包名>/files目录。
String[] fileList()                                    //获取主文件目录下的文件列表。可与其他方法配合使用,如openFileInput(String)。
FilegetCacheDir()                                      //获取/data/data/<包名>/cache目录。应注意及时清理该目录,并节约使用。450
FileInputStream openFileInput(String name)             //打开现有文件进行读取。
FileOutputStream openFileOutput(String name, int mode) //打开文件进行写入,如果不存在就创建它。

又或者看下面一张图,图片来自 Holmofy的简书

 

 

使用SharedPreferences

SharedPreferences本质上就是文件系统中的文件,可使用SharedPreferences类读写它。

SharedPreferences实例用起来更像一个键值对仓库(类似于Bundle),但它可以通过持久化存储保存数据。键值对中的键为字符串,而值是原子数据类型。进一步查看shared preferences文件可知,它们实际上是一种简单的XML文件,但SharedPreferences类已屏蔽了读写文件的实现细节。sharedpreferences文件保存在应用沙盒中,所以,不应用它保存类似密码这样的敏感信息。

要获得SharedPreferences定制实例,可使用Context.getSharedPreferences (String, int)方法。然而,在实际开发中,我们并不关心SharedPreferences实例具体是什么样,只要它能共享于整个应用就可以了。这种情况下,最好使用方法:

    PreferenceManager.getDefaultSharedPreferences(Context)

该方法会返回具有私有权限和默认名称的实例(仅在当前应用内可用)。

 

取出查询字符串值非常简单,调用SharedPreferences.getString(...)就可以了。如果是其他类型数据,就调用对应的取值方法,比如getInt(...)。第二个参数指定默认返回值

    PreferenceManager.getDefaultSharedPreferences(context)
        .getString(PREF_SEARCH_QUERY,null);

调用SharedPreferences.edit()方法,可获取一个SharedPreferences.Editor实例。

它就是在SharedPreferences中保存查询信息要用到的类。与FragmentTransaction的使用类似,利用SharedPreferences.Editor,可将一组数据操作放入一个事务中。如有一批数据要更新,在一个事务中批量写入就可以了。

private static final String PREF_SEARCH_QUERY = "Query";
PreferenceManager.getDefaultSharedPreferences(context)
            .edit()
            .putString(PREF_SEARCH_QUERY, query)
            .apply(); 

SharedPreferences.Editor的apply()异步方法会写入数据。然后该SharedPreferences文件的其他用户就能看到写入的数据了。apply()方法首先在内存中执行数据变更,然后在后台线程上真正把数据写入文件。

 

发布了21 篇原创文章 · 获赞 46 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览