通过在共享首选项中使用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。
答案 0 :(得分:1)
将大String
存储到SharedPreferences
是一项长时间的异步操作。检查您的问题是不是您只是在保存之前尝试读取该值。同时检查两个操作是否使用相同的SharedPreferences
实例。
答案 1 :(得分:0)
创建sqLite数据库。 共享首选项具有大小限制。 通常,它在处理时用于存储数据:
小数据(可能是游戏得分,用户名等)
在键值对
答案 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()