rxjava retrofit okhttp 封装例子
时间: 2023-10-06 19:10:48 浏览: 127
很高兴为您解答这个问题。以下是一个基于RxJava、Retrofit和OkHttp的网络请求封装示例:
创建一个叫做RetrofitUtil的类,加入以下代码:
```java
public class RetrofitUtil {
private static Retrofit retrofit;
private static OkHttpClient okHttpClient;
public static Retrofit getRetrofit() {
if (okHttpClient == null) {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.build();
}
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
return retrofit;
}
}
```
该类包含一个静态的getRetrofit()方法,它返回一个Retrofit的实例,该实例配置了OkHttp客户端、Gson转换器和RxJava适配器。这是一个单例模式,如果已经创建了Retrofit实例,则返回旧实例,否则创建一个新实例。
接下来,创建一个叫做ApiService的接口,加入以下代码:
```java
public interface ApiService {
@GET("users/{username}")
Observable<User> getUser(@Path("username") String username);
}
```
这个接口包含一个getUse()方法,该方法使用@GET注解指定请求的URL,RxJava的Observable来处理返回数据和参数,参数使用@Path注解指定。
最后,创建一个叫做ApiUtil的类,加入以下代码:
```java
public class ApiUtil {
private static final ApiService apiService = RetrofitUtil.getRetrofit().create(ApiService.class);
public static Observable<User> getUser(String username) {
return apiService.getUser(username);
}
}
```
该类包含了一个静态的getUser()方法,这个方法返回一个Observable,在这个Observable中使用ApiService的getUser()方法来获取数据。
您可以使用RxJava进行链式调用:
```java
ApiUtil.getUser("octocat")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<User>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(User user) {
// 处理返回数据
}
@Override
public void onError(Throwable e) {
// 处理异常
}
@Override
public void onComplete() {
}
});
```
以上就是一个基于RxJava、Retrofit和OkHttp的网络请求封装示例。希望这可以帮助到您!
阅读全文