簡體   English   中英

如何通過輸入順序從共享首選項中保存和檢索數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM