FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法(Android)
折腾小半天的问题,这里先感谢一下深圳的小伙子,远程帮我搞,虽然也没有搞出来==========FUCK
声明:Android开发下发生此异常,Java开发下并不会有这个问题
异常重现
简单说一下抛出异常的代码:
(1)解析json代码如下:
RecommendBean<RecommendListBean> obj = JSON.parseObject(jsonString, new TypeReference<RecommendBean<RecommendListBean>>(){});
RecommendListBean recommendListBean = (RecommendListBean) (obj.getData());
错误日志如下:
java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.test.RecommendListBean
(2)model 如下:
package com.test; /**
* Created by Travis on 2017/8/20.
*/ public class RecommendBean<T> { private int status;
private String message;
private T data; public int getStatus() {
return status;
} public void setStatus(int status) {
this.status = status;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public T getData() {
return data;
} public void setData(T data) {
this.data = data;
}
}
package com.test; import java.util.List; /**
* Created by lenovo on 2017/8/20.
*/ public class RecommendListBean { private int count;
private List<RecommendListItemBean> list; public int getCount() {
return count;
} public void setCount(int count) {
this.count = count;
} public List<RecommendListItemBean> getList() {
return list;
} public void setList(List<RecommendListItemBean> list) {
this.list = list;
} }
package com.test; import java.io.Serializable; /**
* Created by Travis on 2017/8/20.
*/ public class RecommendListItemBean implements Serializable {
private static final long serialVersionUID = 21455356667888L; private int uid;
private String nickname;
private int sex;
private int age;
private String avatar;
private String theme_pic;
private String job;
private String signature;
private String sound;
private int sound_length;
private int fee; public RecommendBean getRecommend() {
return recommend;
} public void setRecommend(RecommendBean recommend) {
this.recommend = recommend;
} private RecommendBean recommend; public int getUid() {
return uid;
} public void setUid(int uid) {
this.uid = uid;
} public String getNickname() {
return nickname;
} public void setNickname(String nickname) {
this.nickname = nickname;
} public int getSex() {
return sex;
} public void setSex(int sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getAvatar() {
return avatar;
} public void setAvatar(String avatar) {
this.avatar = avatar;
} public String getTheme_pic() {
return theme_pic;
} public void setTheme_pic(String theme_pic) {
this.theme_pic = theme_pic;
} public String getJob() {
return job;
} public void setJob(String job) {
this.job = job;
} public String getSignature() {
return signature;
} public void setSignature(String signature) {
this.signature = signature;
} public static class RecommendBean<T> implements Serializable {
private static final long serialVersionUID = 21455356667889L; private int id;
private int user_id;
private int type;
private Object content;
private int zan;
private int status;
private String create_time;
private String update_time;
private int zanTotal;
private int commentTotal;
private T picture;
private T video; public int getType() {
return type;
} public void setType(int type) {
this.type = type;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getUser_id() {
return user_id;
} public void setUser_id(int user_id) {
this.user_id = user_id;
} public Object getContent() {
return content;
} public void setContent(Object content) {
this.content = content;
} public int getZan() {
return zan;
} public void setZan(int zan) {
this.zan = zan;
} public int getStatus() {
return status;
} public void setStatus(int status) {
this.status = status;
} public String getCreate_time() {
return create_time;
} public void setCreate_time(String create_time) {
this.create_time = create_time;
} public String getUpdate_time() {
return update_time;
} public void setUpdate_time(String update_time) {
this.update_time = update_time;
} public int getZanTotal() {
return zanTotal;
} public void setZanTotal(int zanTotal) {
this.zanTotal = zanTotal;
} public int getCommentTotal() {
return commentTotal;
} public void setCommentTotal(int commentTotal) {
this.commentTotal = commentTotal;
} public T getPicture() {
return picture;
} public void setPicture(T picture) {
this.picture = picture;
} public T getVideo() {
return video;
} public void setVideo(T video) {
this.video = video;
}
}
}
原因分析:

经过debug发现此处泛型所在的地方,仍然还是JSONObject,而没有解析成对应的对象,仅仅只是将obj解析成需要的实体对象了。
即使此处使用强转,仍然会有报错信息:cannot be cast to com.test.RecommendListBean
解决办法: 换用GSON来解析,具体方法如下
Gson gson = new Gson();
RecommendBean<RecommendListBean> obj = gson.fromJson(jsonString, new TypeToken<RecommendBean<RecommendListBean>>(){}.getType());
RecommendListBean recommendListBean = (RecommendListBean) (obj.getData());
FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法(Android)的更多相关文章
- 【Thymeleaf】Thymeleaf模板对没有结束符的HTML5标签解析出错的解决办法
解决方案 spring: thymeleaf: mode: LEGACYHTML5 <dependency> <groupId>net.sourceforge.nekohtml ...
- 关于使用jquery时,ie8下提示对象不支持的属性或方法的解决办法
转自:http://wapapp.baidu.com/auoong/item/538790fcbe87c834d7ff8cde 首先这个问题的前提是已经排除了常见的这个问题.下面说一种今天我碰到的一种 ...
- 对象不支持“attachEvent”属性或方法的解决办法
有些脚本在IE11下执行会报错误: 对象不支持“attachEvent”属性或方法 解决办法 解决办法:把attachEvent改为addEventListener即可
- [hadoop] map函数中使用FileSystem对象出现java.lang.NullPointerException的原因及解决办法
问题描述: 在hadoop中处理多个文件,其中每个文件一个map. 我使用的方法为生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径.每个map 任务获得一个路径名作为输入. 在eclip ...
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...
- spyder在编辑过程中被自己弄乱了,想要恢复成安装时默认的格式或者重置页面格式的解决办法
打开spyder,tools-->Reset Spyder to factory defaults,按照如上操作即可恢复成安装时的默认格式.
- 含有按钮的ScrollView在iOS8中无法滚动的解决办法 | ScrollView with UIControl/UIButton subviews not scrollable under iOS 8
转自:http://zcw.me/blogwp/%E5%90%AB%E6%9C%89%E6%8C%89%E9%92%AE%E7%9A%84scrollview%E5%9C%A8ios8%E4%B8%A ...
- EF 一个实体对象不能由多个 IEntityChangeTracker 实例引用 解决办法
在DAL层中,建立工厂类 namespace DAL { public static class SysDbContextFactory { /// <summary> /// 从Http ...
- ecshop transport.js IE报错(608行),对象不支持此属性或方法 的解决办法
解决办法: 将if (this.hasOwnProperty(k)) { 改为: if (this.hasOwnProperty && this.hasOwnProperty(k)) ...
随机推荐
- Linux 下挂在ntfs 硬盘
CentOS 7 下想要挂载NTFS的文件系统该怎么办呢? 我们需要一个NTFS-3G工具,并编译它之后在mount就可以了,就这么简单. 首先要进入官网下载NTFS-3G工具 http://www. ...
- vijos1101题解
题目: 研究表明,这种传染病的传播具有两种很特殊的性质: 第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不 得病,或者是XY之间的传播途径被切断,则X就不会得病. 第二是,这种 ...
- AJAX跨域的常见方法
由于在工作中需要使用AJAX请求其他域名下的请求,但是会出现拒绝访问的情况,这是因为基于安全的考虑,AJAX只能访问本地的资源,而不能跨域访问.比如说你的网站域名是aaa.com,想要通过AJAX请求 ...
- Akka(12): 分布式运算:Cluster-Singleton-让运算在集群节点中自动转移
在很多应用场景中都会出现在系统中需要某类Actor的唯一实例(only instance).这个实例在集群环境中可能在任何一个节点上,但保证它是唯一的.Akka的Cluster-Singleton提供 ...
- delphi选择打印机打印
printer.getprinter(mdevice, mdriver, mport, mhdmode); printer.setprinter(pchar(g_PRNzt), mdriver, mp ...
- 用Left join代替not in
很多人都知道 在各种数据库里面 not in 的效率极其低下.例如 select * from a where a.id not in ( select id from b ) 我们假如a表有 10万 ...
- java Static的使用
static是一个静态修饰符,用于修饰成员(成员变量,成员函数).<thinking in java>对staic的使用场景有下面2种定义:“一种情形是只想用一个存储区域来保存一个特定的数 ...
- webgl开发第一道坎——矩阵与坐标变换
一.齐次坐标 在3D世界中表示一个点的方式是:(x, y, z);然而在3D世界中表示一个向量的方式也是:(x, y, z);如果我们只给一个三元组(x, y, z)鬼知道这是向量还是点,毕竟点与向量 ...
- Mac系统下STF的环境搭建和运行
本文参考以下文章整理:MAC 下 STF 的环境搭建和运行 一. 前言 STF,全称是Smartphone Test Farm,WEB 端批量移动设备管理控制工具,就是可以用浏览器来批量控制你的移动设 ...
- 【javascript】变量作用范围
一.全局变量&局部变量 test="" 全局变量 var test="" 局部变量,无块的概念,作用域为function 或者script块 二.有意思 ...