异常com.google.gson.internal.StringMap cannot be cast to XXX解决方案
来源:互联网 发布:杉帝网络 编辑:程序博客网 时间:2024/05/01 22:19
02-15 07:20:06.485: E/AndroidRuntime(1766): java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to com.bzjm.beans.Fshopinfo
这个问题困扰了我N天了,今天终于解决了。什么网上说的代码混淆都是扯淡……
异常描述
期望使用一个方法将JsonArray字符串转换为对象List,方法运行结束后,结果List中的对象不能识别为传入的T对象类型,而是识别为一个Map导致后续出错。
先说下问题背景:
本来我通过下面的方法解析服务器的数据转换为List对象,解析成功没有问题,使用list.toString()方法可以打印出解析好的数据,但是当通过list.get(index)方法获取list对象中的某一特定对象时,就会报上面的那个异常,这让我苦闷了N天,在百度上百度了一堆,无果。今天终于找到了解决方案。
public static <T> List<T> getDatalist(String jsonString, Class<T> type) {List<T> list = new ArrayList<T>();Gson gson = new Gson();list = gson.fromJson(jsonString, new TypeToken<List<T>>() {}.getType());return list;}
调用方式 :
List<FShopInfo> list = getDatalist(jsonString,FShopInfo.class)
异常原因
- 作为方法传入参数,Java编译过程会将泛型对象类型擦除。
- “Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。”
如果通过调用方法的形式,方法中的new TypeToken<List<T>>(){}.getType(). 在运行时,泛型已经被擦除。
解决方案:
方案一:
不通过以上调用方法的形式传值,直接copy方法内的代码进行转换
方案二:
先将Json对象转换为数组,再通过数组的形式,转换为list对象
public static <T> List<T> StringTolist(String jsonString, Class<T[]> type) {Gson gson = new Gson();T[] list = gson.fromJson(jsonString, type);return Arrays.asList(list);}
调用方式(可以使用方法调用传入参数(数组不会在java编译过程中将类型擦除)):
List<FShopInfo> list = getDatalist(jsonString,FShopInfo[ ].class);
3 0
- 异常com.google.gson.internal.StringMap cannot be cast to XXX解决方案
- com.google.gson.internal.StringMap cannot be cast XXX
- com.google.gson.internal.StringMap cannot be cast to
- 异常com.google.gson.internal.StringMap cannot cast to..原因&解决方案
- 异常com.google.gson.internal.StringMap cannot cast to..原因&解决方案
- Gson解析报错 java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to XXX
- com.google.gson.internal.StringMap cannot be cast XXX(整理)
- com.google.gson.internal.LinkedTreeMap cannot be cast to xxx
- com.google.gson.internal.LinkedTreeMap cannot be cast to xxx
- .ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
- com.google.gson.internal.LinkedTreeMap cannot be cast to entity
- java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.
- com.google.gson.internal.LinkedTreeMap cannot be cast to test.UserBean at t..
- Retrofit 泛型解析遇到com.google.gson.internal.LinkedTreeMap cannot be cast to object
- java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
- com.google.gson.internal.LinkedTreeMap cannot be cast to List1.class
- com.google.gson.internal.LinkedTreeMap cannot be cast to test.XBean at ...
- 问题 java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
- Zend Studio 中安装emmet插件的方法
- hdu1176 dp
- 浏览器页面渲染基本过程
- iOS学习路线
- 淘宝架构框架
- 异常com.google.gson.internal.StringMap cannot be cast to XXX解决方案
- iOS 解决sdk在iOS7上出现的Bug
- Python报错:Visual C++ is required和ImportError: DLL load failed
- C# WebService (二)发布与IIS配置
- IOS 如何获取汉字字符串的拼音
- HDU1048——史上最难的题
- 心跳包机制
- ubuntu vim终端编辑命令小结,方便以后查找
- Flume原理