Android 无法在共享首选项中存储字符串(巨大)
Iam通过在共享首选项中使用GSON将复杂对象转换为json来存储它。但是在检索时,无法获取所需的字符串 代码 这里holderListCustomizationMap是对象的复杂映射 设置共享首选项:Android 无法在共享首选项中存储字符串(巨大),android,sharedpreferences,Android,Sharedpreferences,Iam通过在共享首选项中使用GSON将复杂对象转换为json来存储它。但是在检索时,无法获取所需的字符串 代码 这里holderListCustomizationMap是对象的复杂映射 设置共享首选项: Gson gson = builder.create(); SharedPreferences sh=getSharedPreferences("MYFILE",Context.MODE_PRIVATE); SharedPreferences.Editor edi
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();
SharedPreferences sh = context.getSharedPreferences("MYFILE", Context.MODE_PRIVATE);
String listCutomizatoinJson = sh.getString("Holder","");
在存储时,json输出为整个预期字符串
从共享首选项检索我的地图:
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();
SharedPreferences sh = context.getSharedPreferences("MYFILE", Context.MODE_PRIVATE);
String listCutomizatoinJson = sh.getString("Holder","");
当我打印listCutomizatoinJson时,得到的不仅仅是整个json。创建一个sqLite数据库。 共享首选项有大小限制。 通常,它用于在处理以下内容时存储数据:
GsonBuilder gsonb = new GsonBuilder();
Gson mGson = gsonb.create();
String listCutomizatoinJson = sh.getString("Holder", "");
String yourFile = mGson.fromJson(loadValue, String);
当您刚从SharedReferences获取字符串时,仍然需要将其转换回原始对象
此外,当您存储您的值时,请尝试使用
editor.commit();
而不是
.apply()
将一个大的字符串
存储到共享引用
是一个长时间的异步操作。检查您的问题是否不是您只是试图在保存之前读取该值。还要检查两个操作是否使用相同的SharedReferences
实例。如果数据太大,则可以尝试将数据保存到数据库。使用或mlite
可以轻松快速地保存数据SharedReferences
不是存储大对象的地方,而是存储小值和键值的地方。共享首选项的大小限制是什么。json解析没有问题,因为解析后打印json字符串时,它会按预期显示。是的,我知道,但包含我的json本身的listCutomizatoinJson字符串变为空白。因此无法重新创建我的对象。@请查看我的编辑。它可能是.apply()
,我不确定,因为我总是使用.commit()
当它成功时.commit()会给你一个true。commit
和apply
之间没有太大区别,只是commit
会返回操作是否成功。是的,我只是自己搜索了它。但是看起来他的对象根本没有被存储,所以使用commit
我们至少可以确定在存储值时没有出错