Retrofit+RxJava

博客展示了RetrofitUtil类的代码,包含静态实例和ObservedApis对象的定义,属于Android开发相关内容。

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

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);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值