1. 程式人生 > >封住Rxjava+Retrofit 的網路請求

封住Rxjava+Retrofit 的網路請求

public class HttpUtils {

    private BaseService baseService;
    private Observable<ResponseBody> observable;

    public HttpUtils(){
        Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl("http://www.zhaoapi.cn/")
                .build();
        baseService = retrofit.create(BaseService.class);
    }
    public HttpUtils get(String url, Map<String,String>map){
        if(map==null){
            map = new HashMap<>();
        }
        observable = baseService.get(url,map);
        setObservable();
        return this;
    }
    public HttpUtils 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);
    }
}