Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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
Java 将json对象反序列化为库类_Java_Android_Json_Gson - Fatal编程技术网

Java 将json对象反序列化为库类

Java 将json对象反序列化为库类,java,android,json,gson,Java,Android,Json,Gson,我现在正在编写一些android代码,我需要使用SharedReferences保存一个对象,为此我想我可以使用Gson将其转换为Json字符串并存储该字符串。问题是,当我尝试反序列化它时,我会得到一个非法的参数异常,该异常由未正确反序列化的字段引起。我想为这个类编写一个自定义的反序列化方法,但是这个类来自一个API,我作为一个库拥有这个API,我没有访问权。有什么想法吗?提前谢谢 编辑:以下是与此问题对应的logcat文本: 10-20 14:29:42.600: E/AndroidRunti

我现在正在编写一些android代码,我需要使用SharedReferences保存一个对象,为此我想我可以使用Gson将其转换为Json字符串并存储该字符串。问题是,当我尝试反序列化它时,我会得到一个非法的参数异常,该异常由未正确反序列化的字段引起。我想为这个类编写一个自定义的反序列化方法,但是这个类来自一个API,我作为一个库拥有这个API,我没有访问权。有什么想法吗?提前谢谢

编辑:以下是与此问题对应的logcat文本:

10-20 14:29:42.600: E/AndroidRuntime(28434): FATAL EXCEPTION: main
10-20 14:29:42.600: E/AndroidRuntime(28434): Process: com.example.planit, PID: 28434
10-20 14:29:42.600: E/AndroidRuntime(28434): java.lang.IllegalArgumentException: invalid value for field
10-20 14:29:42.600: E/AndroidRuntime(28434):    at java.lang.reflect.Field.setField(Native Method)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at java.lang.reflect.Field.set(Field.java:585)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.api.client.util.FieldInfo.setFieldValue(FieldInfo.java:245)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.api.client.util.FieldInfo.setValue(FieldInfo.java:206)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.api.client.util.GenericData.put(GenericData.java:103)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.api.client.util.GenericData.put(GenericData.java:47)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:189)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:146)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.gson.Gson.fromJson(Gson.java:755)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.gson.Gson.fromJson(Gson.java:721)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.gson.Gson.fromJson(Gson.java:670)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.google.gson.Gson.fromJson(Gson.java:642)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.example.planit.TabbedActivity.getPlanItID(TabbedActivity.java:34)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.example.planit.FriendsSectionFragment.onCreate(FriendsSectionFragment.java:39)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.Fragment.performCreate(Fragment.java:1678)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:859)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.BackStackRecord.run(BackStackRecord.java:684)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.os.Handler.handleCallback(Handler.java:733)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.os.Handler.dispatchMessage(Handler.java:95)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.os.Looper.loop(Looper.java:136)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at android.app.ActivityThread.main(ActivityThread.java:5001)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at java.lang.reflect.Method.invokeNative(Native Method)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at java.lang.reflect.Method.invoke(Method.java:515)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-20 14:29:42.600: E/AndroidRuntime(28434):    at dalvik.system.NativeStart.main(Native Method)

您真的需要将所有数据存储在共享首选项中吗?为什么不创建一个API模型并将其存储到sqlite数据库中呢?试试谷歌的
Gson
library
https://sites.google.com/site/gson
@nayoso这不是我的设计决定,所以我只是尝试一下way@IanPanzica,您可以将一个对象序列化为json并将其存储,但将其再次反序列化为对象时出错,对吗?如果是这样,我怀疑到类的映射与gson.fromJson调用中的json值不匹配。如果您可以共享您使用的代码、映射类及其字段和示例json值,您可能会在这里得到答案。抱歉,没有任何代码,它似乎没有得到回答。我可以建议您编写一个pojo类,它具有与json值相同的字段。在反序列化时使用该类。反序列化之后,您将拥有一个由json值填充的对象。如果需要,可以创建受保护api类的实例并映射字段。