Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由于Gson而导致共享优先权输入错误_Android_Json_Sharedpreferences - Fatal编程技术网

Android 由于Gson而导致共享优先权输入错误

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

每次尝试将对象另存为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.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设置的对象存储在某处。