十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      如何使用shared preferences來實現輕量級數據存儲?

      百恒網絡 2017-05-23 5055

      現在,取代硬編碼搜索字符串,南昌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.dgscpc.com/

      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      欧洲精品成人免费视频在线观看| 亚洲精品无码不卡| 免费精品人在线二线三线区别| 99视频精品全部在线| 亚洲中文字幕久久精品无码APP | 国产午夜精品理论片久久影视| 日韩一区在线视频| 日韩一区二区电影| 国产成人精品无码专区| 精品国产丝袜自在线拍国| 亚洲a∨无码精品色午夜| 国产精品制服丝袜一区 | 日韩高清一区二区| 日韩精品在线观看| 国产免费久久精品| 国产精品久久精品福利网站| 2020年国产精品| 国产精品高清视亚洲一区二区| 亚洲午夜精品国产电影在线观看| 亚洲国产精品lv| 久久99蜜桃精品久久久久小说| 久久亚洲国产精品一区二区| 中文字幕日韩精品在线| 孩交VIDEOS精品乱子| 亚洲?V无码成人精品区日韩| 2015日韩永久免费视频播放| 国产精品久久香蕉免费播放| 麻豆精品国产免费观看| 久久频这里精品99香蕉久| 国产a视频精品免费观看| 亚洲精品午夜视频| 精品性影院一区二区三区内射| 久9久9精品免费观看| 亚洲精品无码午夜福利中文字幕 | 亚洲处破女AV日韩精品| 欧洲精品无码一区二区三区在线播放| 最新国产精品剧情在线SS| 亚洲欧洲国产成人精品| 99久久精品免费精品国产| 无码国产69精品久久久久网站| 国产精品天天看天天狠|