Retrofit+RxJava

    xiaoxiao2025-05-19  40

    public class RetrofitUtil { private static final RetrofitUtil ourInstance = new RetrofitUtil(); private ObservedApis observedApis;

    public static RetrofitUtil getInstance() { return ourInstance; } private RetrofitUtil() { initView(); } private void initView() { //拦截器 HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient mClient = new OkHttpClient.Builder() //读取超时 .readTimeout(10, TimeUnit.SECONDS) //连接超时 .connectTimeout(10, TimeUnit.SECONDS) //写超时 .writeTimeout(10, TimeUnit.SECONDS) //添加自定义拦截器 //new Interceptor //请求头 .addInterceptor(new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { //拿到管理者 SharedPreferences mvplogin = MyApp.getContextInstace().getSharedPreferences("mvplogin", Context.MODE_PRIVATE); //获取请求 Request original = chain.request(); //把旧请求的内容,全部复制给新的请求,保证在新的请求中依然有旧请求的所有数据 Request.Builder builder1 = original.newBuilder() .addHeader("userId",mvplogin.getString("phone","")) .addHeader("sessionId",mvplogin.getString("pwd","")); //把新请求的builder,重新build成请求 Request request = builder1.build(); //发送请求,并且获得结果 okhttp3.Response proceed = chain.proceed(request); return proceed; } }).build(); //Retrofit的创建 Retrofit mRetrofit = new Retrofit.Builder() //添加Rxjava工厂 .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl(Api.BASE_URL) .client(mClient) .build(); observedApis = mRetrofit.create(ObservedApis.class); } //get请求 public void get(String url,CallBack callBack){ observedApis.get(url) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(getObserved(callBack)); } //post请求 public void post(String url, Map<String, String> map, CallBack callBack) { //一定要判空,如果是空,创建一个实例就可以了 if (map == null) { map = new HashMap<>(); } observedApis.post(url,map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(getObserved(callBack)); } //delete请求 public void delete(String url, CallBack callBack) { observedApis.delete(url) //后执行在哪个线程 .subscribeOn(Schedulers.io()) //最终完成后执行在哪个线程 .observeOn(AndroidSchedulers.mainThread()) .subscribe(getObserved(callBack)); } //put请求 public void put(String url, Map<String, String> params, CallBack callBack) { if (params == null) { params = new HashMap<>(); } observedApis.put(url, params) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(getObserved(callBack)); } //图片上传 public void postImage(String url, File file, CallBack callBack) { RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part filePart = MultipartBody.Part.createFormData("image", file.getName(), requestBody); observedApis.postImage(url, filePart) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(getObserved(callBack)); } private Observer<? super ResponseBody> getObserved(final CallBack callBack) { Observer<ResponseBody> responseBodyObserver = new Observer<ResponseBody>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { if (callBack!=null){ callBack.onError(e.getMessage()); } } @Override public void onNext(ResponseBody responseBody) { try { String string = responseBody.string(); if (callBack!=null){ callBack.onSuccess(string); } } catch (IOException e) { e.printStackTrace(); } } }; return responseBodyObserver; } //定义接口 public interface CallBack{ void onSuccess(String data); void onError(String data); }

    }

    最新回复(0)