自学Android开发 我的Retrofit2+RxJava3的封装

一、依赖配置

在Model:Android_xxxx.app build.gradle 文件夹里添加

dependencies {
     //retrofit2
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    //Gson
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    //Jackson
    //implementation 'com.squareup.retrofit2:converter-jackson:2.9.0'

    implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
    //RxJava3的适配器
    implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
    //OkHttp3
    implementation 'com.squareup.okhttp3:okhttp:4.9.3'

    //Rxjava3 + RxAndroid3
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

}

二、Retrofit2的封装

请求结果的封装

public class HttpRespondBody<T>{
    private int code;
    private String message;
    private Long count;
    private T data;

    public HttpRespondBody() {
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Long getCount() {
        return count;
    }

    public void setCount(Long count) {
        this.count = count;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }


}

请求API代码示例

public interface HttpApi {

   //Post请求
   @POST("/user/login")
    Observable<HttpRespondBody<你的数据实体类>> login(@Body 你的请求实体类 对象);


   //Post请求 并携带文件
    @Multipart
    @POST("/app/upload/filedata")
    Observable<MyRespondBody<UploadFileVO>> uploadFile(@Part("后端读取请求数据的字段") 你的请求实体类 对象, @Part MultipartBody.Part filePart);

    

}

Retrofit的封装

public class RetrofitUtil {
    private static final int DEFAULT_TIMEOUT = 10;//超时时长


    private static Retrofit retrofit;
    private static RetrofitUtil retrofitUtil;

    private RetrofitUtil() {
        initRetrofit();
    }

    private OkHttpClient getOkHttpClient() {
        return new OkHttpClient.Builder()
                .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
                .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)//设置请求超时时间
                .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)//设置写入超时时间
                .retryOnConnectionFailure(false)//设置出现错误进行重新连接。
                // .cache(cache)  //设置缓存地址
                .build();
    }

    private void initRetrofit() {
        retrofit = new Retrofit.Builder()
                .client(getOkHttpClient())
                .baseUrl(Constant.BAST_URL)
                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    public static HttpApi getHttpApi() {
        if (retrofitUtil == null) {
            synchronized (RetrofitUtil.class) {
                if (retrofitUtil == null) {
                    retrofitUtil = new RetrofitUtil();
                }
            }
        }
        return retrofit.create(HttpApi.class);
    }
}

三、RxJava3的封装

RxJava的封装

public class ObservableUtil {
    private static CompositeDisposable compositeDisposable;

    private static <T> DisposableObserver<HttpRespondBody<T>> build(HttpRespondListener<T> listener) {
        DisposableObserver<HttpRespondBody<T>> observer = new DisposableObserver<HttpRespondBody<T>>() {

            @Override
            protected void onStart() {
                super.onStart();
                listener.onStart();
            }

            @Override
            public void onNext(@NonNull HttpRespondBody<T> body) {
                switch (body.getCode()) {
                    case Constant.REQEST_SUCCESS:
                        listener.onSuccess(body.getData(), body.getCount());
                        break;
                    default:
                        listener.onFailed(body.getMessage());
                        break;
                }
            }

            @Override
            public void onError(@NonNull Throwable e) {
                listener.onFailed(e.toString());
            }

            @Override
            public void onComplete() {
                listener.onFinish();
            }
        };
        return observer;
    }

    public static <T> Disposable addObservable(Observable<HttpRespondBody<T>> observable, HttpRespondListener<T> listener) {

        Disposable disposable = observable.subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(ObservableUtil.build(listener));

        if (compositeDisposable == null){
            synchronized (CompositeDisposable.class){
                if (compositeDisposable == null){
                    compositeDisposable = new CompositeDisposable();
                }
            }
        }

        if (compositeDisposable.add(disposable)) {
            return disposable;
        }else {
            listener.onFailed("请求异常!!!");
            return null;
        }
    }

    //访问监听回调
    public interface HttpRespondListener<T> {

        void onStart();

        void onSuccess(T data, Long cunt);

        void onFailed(String msg);

        void onFinish();

    }


}

CompositeDisposable是用于保存异步的请求,它提供了add和dispose方法。

四、封装的使用

//网络请求模块
public class HttpRequst {

  public static Disposable login(LoginBean bean,@NonNull ObservableUtil.HttpRespondListener<String> listener){
     //这里可以对请求数据进行处理和加密

        return  ObservableUtil.addObservable(RetrofitUtil.getHttpApi().login(bean), listener);
  }

}


//Model模块

public class LoginModel {

    public void login(LoginBean login){
        HttpRequst.login(login, new ObservableUtil.HttpRespondListener<String>() {
            @Override
            public void onStart() {
               //请求前的准备
            }

            @Override
            public void onSuccess(String data, Long cunt) {
             //请求成功
            }

            @Override
            public void onFailed(String msg) {
            //请求失败
            }

            @Override
            public void onFinish() {
            //请求结束
            }
        });
    }
}

如果对您有一些意义,希望您给博主一些鼓励(点赞、关注、收藏),如果有错误欢迎大家评论。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值