十年专注于品牌网站建设 十年专注于品牌网站建设,低调、高逼格、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

如何使用shared preferences来实现轻量级数据存储?

百恒网络 2017-05-23 233

现在,取代硬编码搜索字符串,南昌APP开发公司-百恒网络教你来实现用户在SearchView中输入并提交的查询指令。在PhotoGallery应用中,一次只有一个激活的查询。应用应该保存这个查询,即使应用或设备重启也不会丢失。要实现这个目标,可以把查询字符串写入shared preferences。只要用户提交查询,就把它写入shared preferences,覆盖掉之前保持的字符串。实际搜索Flickr时,就从sharedpreferences中取出查询字符串,把它作为text参数值。

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

要获得定制的SharedPreferences 实例, 可使用Context.getSharedPreferences (String,int)方法。然而,在实际开发中,我们并不关心具体是什么样的SharedPreferences实例,只要它能共享于整个应用就可以了。这种情况下,最好使用PreferenceManager.getDefaultSharedPreferences(Context)方法,该方法会返回具有私有权限和默认名称的实例(仅在当前应用内可用)。

如下图代码清单所示,添加一个名为QueryPreferences的新类,用于读取和写入查询字符串。

添加一个名为QueryPreferences的新类

PREF_SEARCH_QUERY用作查询字符串的存储key,读取和写入时都要用到它。

getStoredQuery(Context)方法返回shared preferences中保存的查询字符串值。不过,它首先要找到指定context 中的默认SharedPreferences 。( QueryPreferences 类没有自己的Context,所以该方法的调用者必须传入一个。)

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

setStoredQuery(Context)方法向指定context的默认shared preferences写入查询输入值。在以上代码中,调用SharedPreferences.edit()方法,可获取一个SharedPreferences.Editor实例。它就是在SharedPreferences中保存查询信息要用到的类。与FragmentTransaction的

使用类似,利用SharedPreferences.Editor,可将一组数据操作放入一个事务中。如有一批数据要更新,在一个事务中进行批量数据存储写入操作就可以了。

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

QueryPreferences是PhotoGallery应用的数据存储引擎。既然已经搞定了查询信息的读取和写入方法,现在就来在PhotoGalleryFragment中应用它们。

首先是保存用户提交的查询信息,如下图代码所示。

保存用户提交的查询信息

接下来,在用户从溢出菜单选择Clear Search选项时清除存储的查询信息(设置为null),如下图代码所示。

在用户从溢出菜单选择Clear Search选项时清除存储的查询信息(设置为null)

发现没有?和第二张图片代码中的做法一样,更新完查询信息,updateItems()方法会被调用。这很有必要,可以确保RecyclerView中显示最新的搜素结果。

最后,别忘了更新FetchItemsTask,来使用保存的查询字符串(终于可以不用硬编码字符串了)。在FetchItemsTask中添加一个定制版构造方法,用于接收查询信息并保存在一个成员变量中备用。更新updateItems()方法,从shared preferences中取出保存的查询信息,用它创建一个FetchItemsTask新实例,如下图代码所示。

更新FetchItemsTask,来使用保存的查询字符串

搜索功能现在应该可以正常使用了。运行PhotoGallery应用,尝试进行一些搜索并查看返回结果。

了解更多南昌APP开发、微信开发等技术资讯,欢迎来电咨询百恒网络,或者访问百恒网络官网查看,网址:http://www.jxbh.cn/

400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×