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()方法首先在内存中执行数据变更,然后在后台线程上真正把数据写入文件。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值