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

本文介绍了一种用于统一处理网络请求返回的JSON数据的方法,通过创建一个通用的HttpUtils类简化了错误状态的判断过程,避免了重复代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设网络请求接口后返还的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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值