在JSON反序列化后访问LinkedHashMap中的嵌套对象

时间:2013-09-19 12:28:46

标签: java json gson linkedhashmap invocationtargetexception

我正在尝试访问LinkedHashMap中的对象,但是当我尝试执行此操作时,我得到InvocationTargetExceptionLinkedHashMap是使用Gson库从JSON转换为一系列Java对象的结果。对象'List'包含所有其他元素:

public class List{
   private Clouds clouds;
   private Number dt;
   private String dt_txt;
   private Main main;
   private Rain rain;
   private Sys sys;
   private List weather;
   private Wind wind;
}

该类还包含getter和setter。

当我执行以下操作时:

for(LinkedHashMap l : ArrayList<LinkedHashMap> result.getList()) {
    Number dt = (Number) l.get("dt");
}

我可以访问变量dt,它实际上返回一个值。但是,当我尝试访问像Main属性这样的任何其他属性时:

Main main = (Main) l.get("main");

我会得到InvocationTargetException。任何想法,提示或技巧?

编辑:

堆栈跟踪:

 09-19 14:37:59.448: E/AndroidRuntime(11192): FATAL EXCEPTION: main
 09-19 14:37:59.448: E/AndroidRuntime(11192): java.lang.ClassCastException:    com.google.gson.internal.LinkedHashTreeMap cannot be cast to com.censored.weather.Main
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at   com.censored.censored.VenloAppDelegate$GetWeatherTask.onPostExecute(VenloAppDelegate.java:305)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.censored.censored.VenloAppDelegate$GetWeatherTask.onPostExecute(VenloAppDelegate.java:1)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask.finish(AsyncTask.java:631)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask.access$600(AsyncTask.java:177)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.Handler.dispatchMessage(Handler.java:99)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.os.Looper.loop(Looper.java:153)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at android.app.ActivityThread.main(ActivityThread.java:5297)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at java.lang.reflect.Method.invokeNative(Native Method)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at java.lang.reflect.Method.invoke(Method.java:511)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
 09-19 14:37:59.448: E/AndroidRuntime(11192):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)

0 个答案:

没有答案