使用OKHttp请求json数据一直显示null
来源:互联网 发布:java从入门到精通电子 编辑:程序博客网 时间:2024/06/05 19:36
问题描述
在使用Okhttp3+retrofit2+Rxjava请求json数据时,可以正常请求数据,但是在转换成实体类时,一直显示null,具体问题如下:
D/OkHttp: { "error_code" : 0 , "reason" : "Success!" , "result" : { "GetRankTypeRsp" : { "RankList" : { "Rank" : [ { "rankTypeID" : "1" , "rankName" : "点击排行"} , { "rankTypeID" : "2" , "rankName" : "搜索排行"} , { "rankTypeID" : "3" , "rankName" : "收藏排行"} , { "rankTypeID" : "4" , "rankName" : "人气排行"}]} , "RankTimeList" : { "RankTime" : [ { "rankTimeID" : "1" , "rankTimeName" : "日排行"} , { "rankTimeID" : "2" , "rankTimeName" : "周排行"} , { "rankTimeID" : "3" , "rankTimeName" : "月排行"} , { "rankTimeID" : "4" , "rankTimeName" : "总排行"}]} , "ContentTypeList" : { "ContentType" : [ { "contentTypeID" : "1" , "contentType" : "图书"} , { "contentTypeID" : "2" , "contentType" : "杂志"} , { "contentTypeID" : "3" , "contentType" : "漫画"}]}}}}D/OkHttp: <-- END HTTP (784-byte body)D/onNext: 0,Result{getRankTypeRsp=null}D/BasePresenter-->: requestSuccess()D/OneFragment: loadSuccess------------Result{getRankTypeRsp=null}D/BasePresenter-->: requestComplete()
问题分析
从上面null异常说明肯定是json格式转换实体类时出现了问题,于是去检查了下ApiMananger类,相关代码如下:
/** * 初始化Retrofit */ public ApiManager() { initOkhttpClient(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //gson和java类相互转化 .addConverterFactory(GsonConverterFactory.create()) .client(mOkHttpClient) .build(); //实例化api接口 mApiService = retrofit.create(ApiService.class); }
确定addConverterFactory()无误后,猜想可能是实体类有问题。
先看下实体类的相互关系
最底部HttpResult是通用的http实体类
public class HttpResult<T> { private int errorCode; private String reason; private T result; public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public T getResult() { return result; } public void setResult(T result) { this.result = result; } @Override public String toString() { return "HttpResult{" + "errorCode=" + errorCode + ", reason='" + reason + '\'' + ", result=" + result + '}'; }}
HttpResult中的result对应着json数据源对象,也就是下面的Result类
public class Result extends BaseEntity.BaseBean { private GetRankTypeRsp getRankTypeRsp; @Override public String toString() { return "Result{" + "getRankTypeRsp=" + getRankTypeRsp + '}'; } public GetRankTypeRsp getGetRankTypeRsp() { return getRankTypeRsp; } public void setGetRankTypeRsp(GetRankTypeRsp getRankTypeRsp) { this.getRankTypeRsp = getRankTypeRsp; }}
Result类中的getRankTypeRsp包含另一个json数据源对象,该类如下:
public class GetRankTypeRsp extends BaseEntity.BaseBean { private RankList RankList; private RankTimeList rankTimeList; private ContentTypeList contentTypeList; public com.ninoyang.geek.model.rankType.RankList getRankList() { return RankList; } public void setRankList(com.ninoyang.geek.model.rankType.RankList rankList) { RankList = rankList; } public RankTimeList getRankTimeList() { return rankTimeList; } public void setRankTimeList(RankTimeList rankTimeList) { this.rankTimeList = rankTimeList; } public ContentTypeList getContentTypeList() { return contentTypeList; } public void setContentTypeList(ContentTypeList contentTypeList) { this.contentTypeList = contentTypeList; } @Override public String toString() { return "GetRankTypeRsp{" + "RankList=" + RankList + ", rankTimeList=" + rankTimeList + ", contentTypeList=" + contentTypeList + '}'; }}
然后再对比一下json数组中
{ "error_code" : 0 , "reason" : "Success!" , "result" : { "GetRankTypeRsp" : { "RankList....省略部分json}}
发现json数组中的GetRankTypeRsp和上面Result类中的getRankTypeRsp大小写不一样,又可能是getxxx和系统中的get方法冲突了,于是尝试把实体类中getRankTypeRsp换成GetRankTypeRsp,然后重新生成了gettter和setter方法,发现居然不报nulll了!!!!!
最终解决方法
使java类中的字段名和json数据中的字段名保持一致,包括大小写。
0 0
- 使用OKHttp请求json数据一直显示null
- OkHttp请求json数据
- okhttp请求json数据
- 使用okhttp 解析json数据
- OkHttp封装+RecyclerView显示网络请求数据
- OKHttp的使用GET和POS 请求方式,处理json数据
- 使用okhttp时没有返回json数据
- 使用okhttp时没有返回json数据
- Android异步线程OkHttp Post请求Json数据并解析
- android 中okhttp post请求传递json数据
- Android异步线程OkHttp Post请求Json数据并解析
- okhttp请求远程数据并在ListView显示
- OKHttp请求网络数据
- OkHttp网络数据请求
- recycleview+okhttp请求数据
- okhttp网络请求数据
- OKHttp + RxJava请求数据
- OkHttp同步请求数据
- OkHttp3-Android网络请求框架常用用法介绍与实例(mob请求天气预报)
- Android开发中常用的设计模式初步解析
- 【42.86%】【codeforces 742D】Arpa's weak amphitheater and Mehrdad's valuable Hoses
- 学期总结
- 工作上github的使用
- 使用OKHttp请求json数据一直显示null
- 用javase写一个类实现自动生成验证码的功能,验证码随机自动生成;
- nc65用友uap平台按钮怎样设置快捷键的实现方式
- 支持向量机
- spring
- Hive2.1.1的安装
- python uuid
- 将Alexnet的拓扑结构和权重从Caffe转换成tensorflow
- 欧几里得, 扩展欧几里得算法模板