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)) ...
随机推荐
- servlet+jsp导入Excel到mysql数据库
package khservlet; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStr ...
- wget访问SOAP接口
SOAP协议主要是XML交互,所以其访问过程类似于这样: wget --header='Content-Type: text/xml;charset=utf-8' --post-data='<s ...
- Randoop测试类和方法(用例自动生成)
详细使用方法见randoop官网: https://randoop.github.io/randoop/manual/index.html 测试程序之前,先检测下你的Randoop是否配置好: 打开c ...
- java constructor 在构造子类时,一定会调用到父类的构造方法 “ 私有属性被继承了?”问题
” Error:Implicit super constructor Pet() is undefined. Must explicitly invoke another constructor “ ...
- asp.net Mvc 动态创建Controller
有这么个需求,Urls如下: http://localhost:52804 http://localhost:52804/home/test http://localhost:52804/test1 ...
- 使用TinyXML进行XML操作
本例基于TinyXML实现XML的自动解析和创建,由于本人是菜鸟刚入门,例子中添加了enum.struct.vector.map.list的常见用法,首先添加6个tinyxml工程文件,然后设置调试参 ...
- 20170722_php_单例模式
<?php class myClass{ private static $obj = null; private function __construc(){ } public static f ...
- linux+windows mysql导入导出sql文件
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql# ...
- npm介绍与cnpm介绍
npm介绍 说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 使用npm安装插件:命令提示符执行npm instal ...
- java 笔记 Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行.首先是执行Tomcat org.apache.catalina.startup ...