RXJAVA+Retrofit抽取
阿新 • • 發佈:2018-12-22
1.第一步
import java.util.Map; import io.reactivex.Observable; import okhttp3.ResponseBody; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.QueryMap; import retrofit2.http.Url; //定義介面 public interface BaseService { @GET Observable<ResponseBody> get(@Url String url, @QueryMap Map<String,String> map); @POST Observable<ResponseBody> post(@Url String url, @QueryMap Map<String,String> map); }
2.第二步抽取工具類
import java.io.IOException; import java.util.HashMap; import java.util.Map; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; public class HttpUtil { private final BaseService baseService; private Observable<ResponseBody> observable; public HttpUtil() { Retrofit retrofit = new Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl("http://www.zhaoapi.cn/") .build(); baseService = retrofit.create(BaseService.class); } public HttpUtil get(String url, Map<String, String> map) { if (map == null) { map = new HashMap<>(); } observable = baseService.get(url, map); setObservable(); return this; } public HttpUtil post(String url, Map<String, String> map) { if (map == null) { map = new HashMap<>(); } observable = baseService.post(url, map); setObservable(); return this; } private void setObservable() { observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } private Observer observer = new Observer<ResponseBody>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseBody responseBody) { try { String string = responseBody.string(); listener.success(string); } catch (IOException e) { e.printStackTrace(); } } @Override public void onError(Throwable e) { String message = e.getMessage(); listener.fail(message); } @Override public void onComplete() { } }; private HttpListener listener; public void result(HttpListener listener) { this.listener = listener; } public interface HttpListener { void success(String data); void fail(String error); } }
3.在需要的Activity或者Fragment中使用