用SharedPreferences保存List(Map(String, String))數據


原因:

SharedPreferences沒有保存數組的方法,但是有時候為了保存一個數組而進行序列化,或者動用sqlite都是有點殺豬焉用牛刀的感覺,所以就自己動手改進一下吧。

解決方案:

采用的方式是先轉換成JSON,然后保存字符串,取出的時候再講JSON轉換成數組就好了。

public void saveInfo(Context context, String key, List<map<string, string="">> datas) {
    JSONArray mJsonArray = new JSONArray();
    for (int i = 0; i < datas.size(); i++) {
        Map<string, string=""> itemMap = datas.get(i);
        Iterator<entry<string, string="">> iterator = itemMap.entrySet().iterator();
 
        JSONObject object = new JSONObject();
 
        while (iterator.hasNext()) {
            Entry<string, string=""> entry = iterator.next();
            try {
                object.put(entry.getKey(), entry.getValue());
            } catch (JSONException e) {
 
            }
        }
        mJsonArray.put(object);
    }
 
    SharedPreferences sp = context.getSharedPreferences("finals", Context.MODE_PRIVATE);
    Editor editor = sp.edit();
    editor.putString(key, mJsonArray.toString());
    editor.commit();
}
 
public List<map<string, string="">> getInfo(Context context, String key) {
    List<map<string, string="">> datas = new ArrayList<map<string, string="">>();
    SharedPreferences sp = context.getSharedPreferences("finals", Context.MODE_PRIVATE);
    String result = sp.getString(key, "");
    try {
        JSONArray array = new JSONArray(result);
        for (int i = 0; i < array.length(); i++) {
            JSONObject itemObject = array.getJSONObject(i);
            Map<string, string=""> itemMap = new HashMap<string, string="">();
            JSONArray names = itemObject.names();
            if (names != null) {
                for (int j = 0; j < names.length(); j++) {
                    String name = names.getString(j);
                    String value = itemObject.getString(name);
                    itemMap.put(name, value);
                }
            }
            datas.add(itemMap);
        }
    } catch (JSONException e) {
 
    }
 
    return datas;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM