[英]How to save and retrieve data from shared preference by input order?
如何通過Java中的輸入順序從共享首選項中保存和檢索數據?
當我將這些數據保存在共享首選項中時
HashMap<Integer, String> likes = new HashMap<Integer, String>();
// THIS IS INPUT ORDER
likes.put(1,"a")
likes.put(2,"b")
likes.put(3,"c")
likes.put(4,"d")
editor = getSharedPreferences("PREFS_NAM", 0).edit();
for (Map.Entry<Integer, String> entry : likes.entrySet())
editor.putString(String.valueOf((entry.getKey())),
entry.getValue());
editor.apply();
當我找回它
SharedPreferences prefs = getSharedPreferences("PREFS_NAM", 0);
for (Map.Entry entry : prefs.getAll().entrySet())
likes.put(Integer.valueOf(entry.getKey().toString()),
entry.getValue().toString());
看起來像
(1,"a")
(2,"b")
(4,"d")
(3,"c")
輸入順序不一樣!
試試下面的Map<Integer, String> likes = new LinkedHashMap<Integer, String>();
LinkedHashMap的設計目的是使鍵,值和條目保持其放置順序。
SharedPreferences
是為存儲和檢索簡單數據而設計的,將它們用於稍微復雜的結構是相當尷尬的。
您似乎正在嘗試存儲和檢索Map
,並且希望迭代順序為插入順序。 首先,您應該使用LinkedHashMap
而不是普通的HashMap
因為后者不能保證迭代順序。
Map<Integer, String> likes = new LinkedHashMap<>();
但是,這並不意味着當您從SharedPreferences
獲取數據時將保留順序。
您可以通過使用鍵"K0"
, "K1"
, "K2"
...來存儲地圖的鍵,並使用鍵"V0"
, "V1"
, "V2"
...來存儲地圖的值來解決此問題。 這樣的事情會起作用(未經測試):
int index = 0;
for (Map.Entry<Integer, String> e : likes.entrySet()) {
editor.putInt("K" + index, e.getKey());;
editor.putString("V" + index, e.getValue());
index++;
}
然后檢索:
Map<Integer, String> likes = new LinkedHashMap<>();
Map<String, ?> all = prefs.getAll();
for (int i = 0; i < all.size() / 2; i++)
likes.put((Integer) all.get("K" + i), (String) all.get("V" + i));
這顯然是可怕的,並且SharedPreferences
並不是真的為此設計的,但它確實有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.