RxJava2是一个基于观察者模式的响应式编程库,Retrofit2是一个类型安全的HTTP客户端库。结合使用可以实现简洁高效的网络请求处理。
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
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 {
@POST("user/login")
Observable<Response<LoginResponse>> login(
@Body LoginRequest loginRequest
);
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
public class LoginRequest {
private String username;
private String password;
// 构造函数、getter和setter
}
public class LoginResponse {
private String token;
private User user;
// getter和setter
}
LoginRequest loginRequest = new LoginRequest("username", "password");
apiService.login(loginRequest)
.subscribeOn(Schedulers.io()) // 在IO线程执行网络请求
.observeOn(AndroidSchedulers.mainThread()) // 在主线程处理结果
.subscribe(new Observer<Response<LoginResponse>>() {
@Override
public void onSubscribe(Disposable d) {
// 可以在这里显示加载进度条
}
@Override
public void onNext(Response<LoginResponse> response) {
if (response.isSuccessful()) {
LoginResponse loginResponse = response.body();
// 处理成功响应
} else {
// 处理错误响应
}
}
@Override
public void onError(Throwable e) {
// 处理网络错误
}
@Override
public void onComplete() {
// 请求完成,可以隐藏加载进度条
}
});
apiService.login(loginRequest)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
response -> {
if (response.isSuccessful()) {
// 处理成功响应
} else {
// 处理错误响应
}
},
throwable -> {
// 处理错误
}
);
@POST("user/login")
@Headers({
"Content-Type: application/json",
"Accept: application/json"
})
Observable<Response<LoginResponse>> login(@Body LoginRequest loginRequest);
@POST("user/login")
Observable<Response<LoginResponse>> login(
@Header("Authorization") String authToken,
@Body LoginRequest loginRequest
);
通过RxJava2和Retrofit2的组合,可以构建出高效、可维护的网络请求代码,同时提供良好的错误处理机制。
没有搜到相关的文章