假设网络请求接口后返还的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() {
@Override
public 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> {
@Override
public 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;
}
}