无法在共享首选项中存储字符串(巨大)

时间:2015-04-07 07:23:47

标签: android sharedpreferences

通过在共享首选项中使用GSON将其转换为json来存储我的复杂对象。但是在检索它时,无法获得预期的字符串。

CODE

这里holderListCustomizationMap是复杂的对象地图。

设置共享偏好设置:

Gson gson = builder.create();
        SharedPreferences sh=getSharedPreferences("MYFILE",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sh.edit();
        String json = gson.toJson(holderListCustomizationMap);
        editor.putString("Holder",json);
        editor.apply();

存储时,json打印出来是整个预期的字符串。

从共享偏好设备中检索我的地图:

SharedPreferences sh = context.getSharedPreferences("MYFILE", Context.MODE_PRIVATE);
    String listCutomizatoinJson = sh.getString("Holder","");

当我打印listCutomizatoinJson时,只有 {} 才能获得整个json。

4 个答案:

答案 0 :(得分:1)

将大String存储到SharedPreferences是一项长时间的异步操作。检查您的问题是不是您只是在保存之前尝试读取该值。同时检查两个操作是否使用相同的SharedPreferences实例。

答案 1 :(得分:0)

创建sqLite数据库。 共享首选项具有大小限制。 通常,它在处理时用于存储数据:

  1. 小数据(可能是游戏得分,用户名等)

  2. 在键值对

答案 2 :(得分:0)

共享偏好设置有no limitations

  

SharedPreferences文件中值的最大大小限制为您尝试存储的值的最大大小。 (这意味着你不能把比String更长的String值放在Java中。)

确保您尝试存储正确的值。可能是你有json解析的问题,但不是共享首选项。

答案 3 :(得分:0)

快速search后,我发现共享偏好似乎没有限制。

看起来您正在加载错误地加载字符串。 您需要使用此处的GSON方法。看起来应该是这样的。

GsonBuilder gsonb = new GsonBuilder();
Gson mGson = gsonb.create();
String listCutomizatoinJson = sh.getString("Holder", "");
String yourFile = mGson.fromJson(loadValue, String);

当您从共享偏好中获取字符串时,仍需要将其转换回原始对象

当您存储您的值时,请尝试使用

editor.commit();

而不是.apply()