使用GSON反序列化非泛型类型的ArrayList [英] Deserializing ArrayList of non-generic type using GSON

查看:100
本文介绍了使用GSON反序列化非泛型类型的ArrayList的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编辑:空指针是由于形成不良的json。





m试图将json数据反序列化为一个Restaurant对象的ArrayList,如下所示(我发现在 https://sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples ):

 类型listType = new TypeToken< ArrayList< Restaurant>>(){} .getType(); 
ArrayList< Restaurant> objList = gson.fromJson(r,listType); //(第141行)

但是这给出了帖子末尾显示的错误。 p>

似乎在listType中有一些空指针...这是一个listType的手表:

 listType= ImplForType(id = 830061042288)
args = ListOfTypes(id = 830061040752)
list = null
resolvedTypes = Type [1](id = 830061042800)
loader = PathClassLoader(id = 830060323064)
ownerType0 = null
ownerTypeRes = null
rawType = Class(java.util.ArrayList)(id = 830002592616)
rawTypeName =java.util.ArrayList(id = 830061042328)

我的代码有什么问题?



谢谢

7月

  07-06 17:38:48.825:DEBUG / dalvikvm(1337):使用exceptObj返回的JDWP调用= 0x4364a4a0 
07-06 17:39:00.525:DEBUG / dalvikvm(1337):与exceptObj = 0x4364b1e8
07-06 17:39:15.879返回的JDWP调用:WARN / dalvikvm(1337):threadid = 17:以未捕获的异常退出的线程(group = 0x4000fe70)
07-06 17:39:15.885:错误/ AndroidRuntime(1337):未捕获的处理程序:线程AsyncTask#1由于未捕获的异常退出
07-06 17:39:16.135:DEBUG / dalvikvm(1337):GC释放3322个对象/ 261128字节在114ms
07-06 17:39:16.225:错误/ AndroidRuntime(1337):java.lang.RuntimeException:执行doInBackground()时发生错误
07-06 17: 39:16.225:错误/ AndroidRuntime(1337):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在java。 util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:234)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:258)
07-06 17:39: 16.225:错误/ AndroidRuntime(1337):在java.util.concurrent.FutureTask.run(FutureTask.java:122)
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在java.util .concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:648)
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor。 java:673)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at java.lang.Thread.run(Thread.java:1058)
07-06 17:39: 16.225:错误/ AndroidRuntime(1337):导致:java.lang.NullPointerException
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在org.apache.harmony.luni.lang.reflect。 ListOfTypes.length(ListOfTypes.java:47)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at org.apache.harmony.luni.lang.reflect.ImplForType.toString(ImplForType.java :83)
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在java.lang.StringBuilder.append(StringBuilder.java:209)
07-06 17:39:16.225:错误/ AndroidRuntime 1337):at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:56)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler (JsonDeserializationVisitor.java:65)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:96)
07- 06 17:39:16.225:错误/ AndroidRuntime(1337):在com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
07-06 17:39:16.225:错误/ AndroidRuntime(1337) :com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at com.google.gson.Gson.fromJson(Gson的.java:379)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):at org.digitalfarm.atable.Atable $ GetRestaurantData.doInBackground(Atable.java:141)
07-06 17:39: 16.225:错误/ AndroidRuntime(1337):在org.digitalfarm.atable.Atable $ GetRestaurantData.doInBackground(Atable.java:1)
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在android .os.AsyncTask $ 2.call(AsyncTask.java:185)
07-06 17:39:16.225:错误/ AndroidRuntime(1337):在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java :256)
07-06 17:39:16.225:ERROR / AndroidRuntime(1337):... 4 more


解决方案

这是一个我们在姜饼中修复的已知bug。请参阅 http://code.google.com/p/android/issues / detail?id = 6636


EDIT: the null pointer was due to a badly formed json.

Hi,

I'm trying to deserialize json data to an ArrayList of Restaurant object as follows (inpsired by what I found in https://sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples):

Type listType = new TypeToken<ArrayList<Restaurant>>() {}.getType();
ArrayList<Restaurant> objList = gson.fromJson( r, listType );         //(line 141)

but this gives the error shown at the end of the post.

It seems that there is some null pointer in listType... Here's a watch of listType:

"listType"= ImplForType  (id=830061042288)  
    args= ListOfTypes  (id=830061040752)    
        list= null  
        resolvedTypes= Type[1]  (id=830061042800)   
    loader= PathClassLoader  (id=830060323064)  
    ownerType0= null    
    ownerTypeRes= null  
    rawType= Class (java.util.ArrayList) (id=830002592616)  
    rawTypeName= "java.util.ArrayList" (id=830061042328)    

What's wrong with my code? How can I do that?

Thanks

Jul

07-06 17:38:48.825: DEBUG/dalvikvm(1337):   JDWP invocation returning with exceptObj=0x4364a4a0
07-06 17:39:00.525: DEBUG/dalvikvm(1337):   JDWP invocation returning with exceptObj=0x4364b1e8
07-06 17:39:15.879: WARN/dalvikvm(1337): threadid=17: thread exiting with uncaught exception (group=0x4000fe70)
07-06 17:39:15.885: ERROR/AndroidRuntime(1337): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
07-06 17:39:16.135: DEBUG/dalvikvm(1337): GC freed 3322 objects / 261128 bytes in 114ms
07-06 17:39:16.225: ERROR/AndroidRuntime(1337): java.lang.RuntimeException: An error occured while executing doInBackground()
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:234)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:258)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.util.concurrent.FutureTask.run(FutureTask.java:122)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.lang.Thread.run(Thread.java:1058)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337): Caused by: java.lang.NullPointerException
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at org.apache.harmony.luni.lang.reflect.ListOfTypes.length(ListOfTypes.java:47)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at org.apache.harmony.luni.lang.reflect.ImplForType.toString(ImplForType.java:83)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.lang.StringBuilder.append(StringBuilder.java:209)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:56)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler(JsonDeserializationVisitor.java:65)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:96)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at com.google.gson.Gson.fromJson(Gson.java:379)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at org.digitalfarm.atable.Atable$GetRestaurantData.doInBackground(Atable.java:141)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at org.digitalfarm.atable.Atable$GetRestaurantData.doInBackground(Atable.java:1)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256)
07-06 17:39:16.225: ERROR/AndroidRuntime(1337):     ... 4 more

解决方案

this is a known bug that we've fixed in gingerbread; see http://code.google.com/p/android/issues/detail?id=6636

这篇关于使用GSON反序列化非泛型类型的ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆