Android RxJava Retrofit 封装实现流程

流程概述

在实现 Android RxJava Retrofit 封装的过程中,我们需要完成以下步骤:

步骤 描述
1 添加依赖库
2 创建网络请求接口
3 创建网络请求服务
4 创建封装的网络请求方法
5 发起网络请求
6 处理网络请求结果

下面我们将逐步介绍每个步骤需要做的事情以及代码实现。

1. 添加依赖库

首先,我们需要在项目的 build.gradle 文件中添加相应的依赖库。在本案例中,我们使用的是 RxJava 和 Retrofit 进行网络请求的封装,因此需要添加以下依赖库:

implementation 'io.reactivex.rxjava2:rxjava:2.2.20'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

2. 创建网络请求接口

接下来,我们需要创建一个网络请求接口,用于定义与服务器交互的接口方法。可以新建一个名为 ApiService 的接口文件,代码如下:

public interface ApiService {
    @GET("api/data/{category}/{count}/{page}")
    Observable<ApiResponse<List<Data>>> getDataList(
            @Path("category") String category,
            @Path("count") int count,
            @Path("page") int page
    );
}

以上代码中,我们使用了 Retrofit 的注解来定义接口方法,@GET 表示使用 GET 请求方式,@Path 表示路径中的参数。

3. 创建网络请求服务

接下来,我们需要创建一个网络请求服务类,用于构建 Retrofit 实例,并提供网络请求接口的实例。可以新建一个名为 ApiServiceClient 的类文件,代码如下:

public class ApiServiceClient {
    private static final String BASE_URL = "
    
    private static ApiService apiService;
    
    public static ApiService getService() {
        if (apiService == null) {
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(new LoggingInterceptor()) // 添加自定义的拦截器,用于打印请求日志
                    .build();
                    
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(client)
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
                    
            apiService = retrofit.create(ApiService.class);
        }
        return apiService;
    }
}

以上代码中,我们通过 RetrofitBuilder 构建了一个 Retrofit 实例,并设置了基础 URL、自定义的 OkHttp 客户端、RxJava 适配器和 Gson 转换器。

4. 创建封装的网络请求方法

接下来,我们创建一个封装的网络请求方法,用于发起网络请求并处理结果。可以在任意一个类中,添加以下代码:

public class ApiUtils {
    public static Observable<List<Data>> getDataList(String category, int count, int page) {
        return ApiServiceClient.getService().getDataList(category, count, page)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
    }
}

以上代码中,我们调用 ApiServiceClientgetService() 方法获取网络请求接口的实例,然后调用接口方法 getDataList() 发起网络请求,并使用 subscribeOn() 指定在 IO 线程进行网络请求,使用 observeOn() 指定在主线程处理结果。

5. 发起网络请求

在需要发送网络请求的地方,可以调用上述封装的网络请求方法 ApiUtils.getDataList()。例如,在 Activity 或 Fragment 中,可以添加以下代码:

ApiUtils.getDataList("category", 10, 1)
    .subscribe(new Observer<List<Data>>() {
        @Override
        public void onSubscribe(Disposable d) {
            // 订阅时的操作,比如显示加载中的进度条
        }

        @Override
        public void onNext(List<Data> dataList) {
            // 请求成功时的操作,比如更新 UI
        }

        @Override
        public void onError(Throwable e) {
            // 请求失败时的操作,比如显示错误提示
        }

        @Override
        public void onComplete() {
            // 请求完成时的操作,比如