由于后台返回的数据结构是固定的,所以我们定义一个泛型父类来解析比较方便
package com.yblt.hct.bean;
/**
* Created by yangfan
* [email protected]
*/
public class ResultBean<T> {
// "header":{
// "messageID":"88882013041509153412",
// "timeStamp":"20130415091534",
// "transactionType":"1001",
// "sign":"mnx3F2vrUFDvUnT2l8Hnzg"
// },
// "body":{
// "userName":"张三",
// "password":"123123",
// "email":"[email protected]",
// "mobile":"11111111111"
// }
public Header header;
public Body body;
public class Header{
public String messageID;
public int resCode;
public String resMsg;
public long timeStamp;
public int transactionType;
}
public class Body{
public T list;
//分页时使用
public long oprTime;
public int page;
public int rowcount;
public int total;
}
}
list定义为泛型,使用时在指定类型
package com.yblt.hct.network.api;
import com.yblt.hct.bean.HomeBanner;
import com.yblt.hct.bean.ResultBean;
import java.util.List;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import rx.Observable;
/**
* Created by yangfan on 17/04/24.
*/
public interface AppApi {
/**
* 首页banner
*
* @param route
* @return
*/
@Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头
@POST("other")
Observable<ResultBean<List<HomeBanner>>> getBanner(@Body RequestBody route);
}
但是这样拿到的解析出来的数据会把list的类型解析成LinkedTreeMap,
因为java的泛型是从上往下指定 递归模式,因为规定了ResultBean的类型但是list的类型未写入,既然找到了问题,解决办法如下
package com.yblt.hct.bean;
/**
* Created by yangfan
* [email protected]
*/
public class ResultBean<T> {
// "header":{
// "messageID":"88882013041509153412",
// "timeStamp":"20130415091534",
// "transactionType":"1001",
// "sign":"mnx3F2vrUFDvUnT2l8Hnzg"
// },
// "body":{
// "userName":"张三",
// "password":"123123",
// "email":"[email protected]",
// "mobile":"11111111111"
// }
public Header header;
public Body<T> body;
public class Header{
public String messageID;
public int resCode;
public String resMsg;
public long timeStamp;
public int transactionType;
}
public class Body<T>{
public T list;
//分页时使用
public long oprTime;
public int page;
public int rowcount;
public int total;
}
}
改动地方为
public Body<T> body;
public class Body<T>
这样泛型是
ResultBean<T> ---> Body<T> ---> T list
这样就把list的类型指定了,问题也就解决了