OkHttp 是一个高效的 HTTP 客户端,用于发起网络请求和处理响应。它支持同步和异步请求、连接池、缓存、重定向、超时设置等功能。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://......")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 处理请求失败
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String responseData = response.body().string();
// 处理响应数据
}
}
});
Retrofit 是一个用于简化网络请求的库,它基于 OkHttp 构建,提供了更高级的抽象层。Retrofit 通过注解来定义 HTTP 请求,并将请求的响应转换为 Java 对象。
public interface ApiService {
@GET("data")
Call<Data> getData();
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://.......")
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call<Data> call = apiService.getData();
call.enqueue(new Callback<Data>() {
@Override
public void onResponse(Call<Data> call, Response<Data> response) {
if (response.isSuccessful()) {
Data data = response.body();
// 处理响应数据
}
}
@Override
public void onFailure(Call<Data> call, Throwable t) {
// 处理请求失败
}
});
RxJava 是一个用于实现响应式编程的库,它提供了丰富的操作符来处理异步数据流。结合 Retrofit,可以更优雅地处理网络请求和响应。
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
public interface ApiService {
@GET("data")
Observable<Data> getData();
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://......")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(new OkHttpClient())
.build();
ApiService apiService = retrofit.create(ApiService.class);
apiService.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Data>() {
@Override
public void onSubscribe(Disposable d) {
// 处理订阅
}
@Override
public void onNext(Data data) {
// 处理响应数据
}
@Override
public void onError(Throwable e) {
// 处理请求失败
}
@Override
public void onComplete() {
// 请求完成
}
});
OkHttp 作为底层 HTTP 客户端,负责实际的网络请求和响应处理。
Retrofit 基于 OkHttp 提供了更高级的抽象层,通过注解来定义 API 请求,并将响应数据解析为 Java 对象。它还可以与不同的转换器(如 Gson、Moshi)和适配器(如 RxJava、Kotlin Coroutines)配合使用。
RxJava 与 Retrofit 配合使用,可以更优雅地处理异步网络请求和响应。通过 RxJava 的流式 API 和强大的操作符,开发者可以轻松地处理复杂的异步操作。