• 用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;
    }
  • 相关阅读:
    共享内存
    文件IO函数和标准IO库的区别
    链表程序
    flash_header.S ( freescale imx6 board)
    深入理解二维数组
    putchar和puts
    指针目标
    C语言:break和continue
    C语言:输入输出
    python lambda
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5673921.html
Copyright © 2020-2023  润新知