Android 由于Gson而导致共享优先权输入错误
每次尝试将对象另存为json以共享首选项时,都会出现此IO异常Android 由于Gson而导致共享优先权输入错误,android,json,sharedpreferences,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(F
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.getSharedReferences(set,context.MODE\u PRIVATE)时代码>一切都很正常
但我注意到,无论我对共享首选项设置了什么值,我都会得到这个异常(来自默认的共享首选项)
在我编写的测试应用程序中,即使我尝试将大json保存到1000个不同的首选项,也不会发生错误
thorws exception的应用程序要大得多,并且使用多索引 在将数据保存到共享首选项中之前,请尝试在日志中打印json字符串中的内容。检查json字符串是否包含有效/预期值。我添加了json。不确定“是否应使用\”进行更改,但其他所有内容看起来都有效。我不确定您为什么要将整个JSON按原样存储到shared pref中。理想情况下,您应该在json响应中解析和提取特定字段,例如说版本代码,并将其保存到shared pref中。在shared pref中存储此类响应时存在一些已知问题。下面是链接:没有帮助该链接。但我会记住你的建议。我解决了。我不知道为什么,但它起作用了。不,它不起作用。:/我想保存整个json,因为我需要将包含Weather place设置的对象存储在某处。在将数据保存到共享首选项之前,请尝试在日志中打印json字符串中的内容。检查json字符串是否包含有效/预期值。我添加了json。不确定“是否应使用\”进行更改,但其他所有内容看起来都有效。我不确定您为什么要将整个JSON按原样存储到shared pref中。理想情况下,您应该在json响应中解析和提取特定字段,例如说版本代码,并将其保存到shared pref中。在shared pref中存储此类响应时存在一些已知问题。下面是链接:没有帮助该链接。但我会记住你的建议。我解决了。我不知道为什么,但它起作用了。不,它不起作用。:/我想保存整个json,因为我需要将包含Weather place设置的对象存储在某处。