安卓开发中 OkHttp 网络工具类 实现OkHttp+RxJava+Retrofit 用代码该如何编写
时间: 2024-01-23 16:02:06 浏览: 97
在 Android 开发中,可以使用 OkHttp 作为网络请求框架、RxJava 作为异步处理框架、Retrofit 作为接口封装框架,来实现网络请求的快速开发。以下是一个基于 OkHttp+RxJava+Retrofit 的网络请求工具类的代码示例:
1. 添加依赖
在 app 模块的 build.gradle 文件中添加以下依赖:
```
implementation 'com.squareup.okhttp3:okhttp:x.x.x'
implementation 'io.reactivex.rxjava2:rxjava:x.x.x'
implementation 'io.reactivex.rxjava2:rxandroid:x.x.x'
implementation 'com.squareup.retrofit2:retrofit:x.x.x'
implementation 'com.squareup.retrofit2:converter-gson:x.x.x'
```
其中,x.x.x 为最新版本号。
2. 创建 RetrofitService 接口
可以创建一个 RetrofitService 接口,通过注解的方式定义网络请求接口。例如:
```java
public interface RetrofitService {
// 定义 GET 请求接口
@GET("api/data/{category}/{count}/{page}")
Observable<GankResult<List<GankItem>>> getGankList(
@Path("category") String category,
@Path("count") int count,
@Path("page") int page
);
}
```
其中,GankResult 和 GankItem 是自定义的类,用于接收服务器返回的数据。
3. 创建 Retrofit 实例
可以创建一个 Retrofit 实例,通过 baseUrl 和 converterFactory 参数配置 Retrofit 实例。例如:
```java
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://gank.io/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
```
其中,GsonConverterFactory 用于将服务器返回的 JSON 格式数据转换为 Java 对象,RxJava2CallAdapterFactory 用于将 Retrofit 的 Call 对象转换为 RxJava 的 Observable 对象,okHttpClient 是一个 OkHttp 的 OkHttpClient 对象,用于配置网络请求参数。
4. 创建 OkHttp 实例
可以创建一个 OkHttp 实例,通过 builder 模式配置网络请求参数。例如:
```java
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.build();
```
其中,connectTimeout、readTimeout 和 writeTimeout 用于设置连接、读取和写入超时时间,interceptor 是一个 OkHttp 的 Interceptor 对象,用于拦截网络请求和响应。
5. 创建网络请求工具类
可以创建一个网络请求工具类,通过 Retrofit 实例创建 RetrofitService 对象,并通过 RxJava 实现异步网络请求。例如:
```java
public class HttpUtil {
private RetrofitService retrofitService;
public HttpUtil() {
// 创建 OkHttp 实例
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build();
// 创建 Retrofit 实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://gank.io/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
// 创建 RetrofitService 接口实例
retrofitService = retrofit.create(RetrofitService.class);
}
// GET 请求
public Observable<GankResult<List<GankItem>>> getGankList(String category, int count, int page) {
return retrofitService.getGankList(category, count, page);
}
}
```
其中,HttpUtil 类使用了单例模式,通过 RetrofitService 接口实例实现网络请求。
6. 使用网络请求工具类
可以在 Activity 或 Fragment 中使用网络请求工具类,通过 RxJava 实现异步网络请求。例如:
```java
public class MainActivity extends AppCompatActivity {
private HttpUtil httpUtil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建 HttpUtil 实例
httpUtil = new HttpUtil();
// 发起 GET 请求
httpUtil.getGankList("Android", 10, 1)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GankResult<List<GankItem>>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(GankResult<List<GankItem>> gankResult) {
// 处理网络请求结果
}
@Override
public void onError(Throwable e) {
// 处理网络请求错误
}
@Override
public void onComplete() {
}
});
}
}
```
其中,subscribeOn() 方法用于指定网络请求在 IO 线程中执行,observeOn() 方法用于指定网络请求结果在主线程中回调。
总之,以上是一个基于 OkHttp+RxJava+Retrofit 的网络请求工具类的代码示例,可以根据实际情况进行调整。
阅读全文