700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 解决 fastjson 泛型报错 : java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to X

解决 fastjson 泛型报错 : java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to X

时间:2023-01-23 03:28:27

相关推荐

解决 fastjson 泛型报错 : java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to X

错误堆栈:

Process: com.huawei.himovie1, PID: 20329java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.zhangyue.group.model.bean.HolderBeanat com.zhangyue.group.adapter.ViewHolderFactory.getItemViewType(ViewHolderFactory.java:184)at com.zhangyue.group.adapter.ViewHolderAdapter.getItemViewType(ViewHolderAdapter.java:64)at com.zhangyue.group.adapter.HeaderAndFooterAdapter.getItemViewType(HeaderAndFooterAdapter.java:96)at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5626)at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5558)at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5554)at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3694)at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3411)at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3963)at android.view.View.layout(View.java:16659)at android.view.ViewGroup.layout(ViewGroup.java:5452)

服务端返回的json 基类

public class BaseResponseBean<T> implements Serializable{public List<T> data;public Page page;public boolean isRestore; // 是恢复场景的数据public static class Page {public int currentPage; // 当前页public int totalPage; // 总页数public int totalRecord; // 总记录数}}

具体的json对应的类

public class MyCircleResponseBean extends BaseResponseBean<MyCircleData>{}

泛型实例类

public class MyCircleData extends CircleData {@Overridepublic String getStyleName() {if(!TextUtils.isEmpty(titleDivide)){return ViewType.STYLE_CIRCLE_LIST_DIVIDE;}else {return ViewType.STYLE_MY_CIRCLE_LIST;}}}

泛型实例基类

public class CircleData implements HolderBean,Serializable {public String id; // 圈子idpublic String type;// 圈子类型public String name;// 圈子名称public String image ;// 圈子封面public String fansCounText;// 粉丝数public String topicCountText; // 发言数public String url; // 圈子详细地址//--------------------------自增字段--------------------------------public String titleDivide;@Overridepublic String getStyleName() {return null;}}

有问题的写法:

data = (BaseResponseBean) JSON.parseObject(body, MyCircleResponseBean.class);

修改之后:

data = JSON.parseObject(body, new TypeReference<BaseResponseBean<MyCircleData>>(){});

疑问:

1.有些版本 data = (BaseResponseBean) JSON.parseObject(body, MyCircleResponseBean.class); 这样写是没有问题的,泛型的集合能够解析,但是我这个版本解析不了。只能修改了。

花了一下午去研究阿里的bug ,觉得有点不值当。所以索引不管了。

2. 这里 不能写data = JSON.parseObject(body, new TypeReference<MyCircleResponseBean >(){});

因为MyCircleResponseBean 里面没有用到泛型,所以这样写解析的还是错误的。

总结:

引用第三方库就是这点不好,有了问题,你有改不了。还不如自己写的自在呦。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。