retrofit&rxjava&gson请求成功后回调的统一处理

来源:互联网 发布:广州本科网络教育 编辑:程序博客网 时间:2024/05/17 04:57

假设网络请求接口后返还的json数据是以如下形式:

error==0

{  "error": 0,  "msg": "suc",  "data":{      "basename": "xxxx.name",      "url": "http://img.xxx.com/xxxxxxxxxxx.jpg"  }}

error==1

{  "error": 1,  "msg": "xxxxx",}


error 和msg是一定返回的,data则是当error==0的时候才返回,当所有接口都采用这种形式的时候,为了避免每次请求都书写重复的判断,可以做一个简单的统一处理 

HttpUtils.class

public class HttpUtils {public static HttpUtils mInstance;public Retrofit mRetrofit;private final Api apiService;private HttpUtils(){HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {@Overridepublic void log(String message) {Log.d("spinach", "OkHttp====message " + message);}});interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);OkHttpClient.Builder httpClient = new OkHttpClient.Builder();httpClient.addInterceptor(interceptor);httpClient.connectTimeout(10, TimeUnit.SECONDS);OkHttpClient client = httpClient.build();mRetrofit = new Retrofit.Builder().client(client).baseUrl(Constant.BASE_URL).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).addConverterFactory(ResponseConvertFactory.create()).build();apiService = mRetrofit.create(Api.class);}public static HRetrofitNetUtils getInstance(){if(mInstance==null){synchronized (HRetrofitNetUtils.class){if(mInstance==null)mInstance = new HRetrofitNetUtils ();}}return mInstance ;}public Api getApiService() {return apiService;}public void getXxxData(Subscriber<VersionData> subscriber,  String y){Observable observable = apiService.getXxxData(y).map(new mFunc<xxxData>()).subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread();}private class mFunc<T> implements Func1<Response<T>, T> {@Overridepublic T call(Response<T> resultOb) {if (resultOb.getError().equals("1")) {//处理}else{return resultOb.getData();} } }}

Api.class


public interface Api {@GET("xxxx/xxx")Observable<Response<xxxData>> getXxxData(@Query("y") String y);}


Response.class


public class Response<T> {private String error;private String msg;private T data;public String getError() {return error;}public void setError(String error) {this.error = error;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public T getData() {return data;}public void setData(T data) {this.data = data;}}


阅读全文
0 0
原创粉丝点击