由于Gson,共享的优先级输入错误

时间:2016-01-21 08:32:20

标签: android json sharedpreferences

每次尝试将对象保存为json到共享首选项时,我都会收到此IO异常。

W/SharedPreferencesImpl: writeToFile: Got exception:
    java.io.IOException: java.nio.charset.CoderResult[Malformed-input error with erroneous input length 1]
    at com.android.internal.util.FastXmlSerializer.flush(FastXmlSerializer.java:245)
    at com.android.internal.util.FastXmlSerializer.endDocument(FastXmlSerializer.java:198)
    at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:193)
    at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:600)
    at android.app.SharedPreferencesImpl.-wrap2(SharedPreferencesImpl.java)
    at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:515)
    at android.app.SharedPreferencesImpl.enqueueDiskWrite(SharedPreferencesImpl.java:536)
    at android.app.SharedPreferencesImpl.-wrap0(SharedPreferencesImpl.java)
    at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:458)

从日志中我发现了一些不好的字符串,但我不知道到底出了什么问题。

导致此问题的代码是:

Gson gson = new Gson();
String json = gson.toJson(value);

SharedPreferences prefs = getSharedPrefs(ctx);
prefs.edit().putString(key, json).commit();

有没有办法解决这个问题而不写一些疯狂的ObjectOutputStream

更新

当我将它打印到日志时,我想写的json看起来像这样:

 {"coordinates":{"latitude":54.55445,"longitude":25.54581,"mVersionCode":1},"name":"CityName"}

更新2

PreferenceManager.getDefaultSharedPreferences(ctx);

这一行在我给定的代码中引起了这一行,这一行是getSharedPrefs(context);方法。当我使用context.getSharedPreferences(set, Context.MODE_PRIVATE);时,一切都运行正常。

我注意到无论我对共享首选项有什么价值,我都会收到此异常(来自默认共享首选项)。

在我写的测试应用程序中,即使我尝试将大json保存到1000个不同的首选项,也不会发生错误。

应用程序,Thorw异常更大并使用multidex。

0 个答案:

没有答案