RxJava和retrofit配合使用进行网络请求在实际开发中还是很强大的。在实际开发中,再对网络请求返回的结果往往要先进行预处理。即先过滤了错误的信息,在执行onNext()方法时只需要考虑正确的结果下如何处理就行。
以一个正常的Json返回为例:
{
"status": 1,
"errmsg": "OK",
"data": {
...}
}
{
"status": 0,
"errmsg": "error",
"data": {}
}
status表示请求结果正确(1)还是错误(0),errmsg为错误信息,data为正请求正确返回的数据。
此时,在Java代码中就可以创建一个JavaBean对象来对应该Json格式:
public class BaseResponse<T> {
public int status;
public String errmsg;
public T data;
public boolean isStatusOK() {
return status == 1;
}
}
由于在onNext()中只需要正确结果中的data,所以需要进行错误信息的过滤:
/**
* 结果预处理,此方法用于规范的JSON格式
* Observable<BaseResponse<T>> -> Observable<T>
* @param <T>
* @return
*/
public static <T> Observable.Transformer<BaseResponse<T>, T> handleResult() {
return new Observable.Transformer<BaseResponse<T>, T>() {
@Override
public Observable<T> call(Observable<BaseResponse<T>> rObservable) {
return rObservable.flatMap(new Func1<BaseResponse<T>, Observable<T>>() {
@Override
public Observable<T> call(BaseResponse<T> tBaseResponse) {
if (tBaseResponse.isStatusOK()) {
return createData(tBaseResponse.data);