在使用Retrofit和RxJava组合的情况下,有哪些好处?
在使用Retrofit和RxJava组合的情况下,有哪些好处?
问题
Retrofit已经在后台线程上运行了。那么为什么还需要另一个后台任务RxJava呢?
我认为最重要的是避免嵌套回调(回调地狱
)。
例如)回调地狱(Retrofit)
public interface MyService
{
@GET("users")
Call<List<UserModel>> getUser();
@GET("userinfo")
Call<UserInfoModel> getUserInfoById(@Query("id") Integer id);
}
service.getUser().enqueue(new Callback<UserModel>() {
@Override
public void onResponse(Call<UserModel> call, Response<UserModel> response) {
//process UserModel
UserModel data = response.body();
//if you want user infomation from server
service.getUserInfo(data.getId()).enqueue(new Callback<UserInfoModel>(){
//... is callback hell!!
});
}
@Override
public void onFailure(Call<UserModel> call, Throwable t) {
//error handling
}
});
例如)避免回调地狱(Retrofit + RxJava)
public interface MyService
{
@GET("users")
Observable<List<UserModel>> getUser();
@GET("userinfo")
Observable<UserInfoModel> getUserInfoById(@Query("id") Integer id);
}
service.getUser()
.flatMapIterable(list -> list)
.flatMap(user -> service.getUserInfoById(user.getId()))
.doOnNext(userinfo -> saveUserInfo(userinfo)).subscribe();
RxJava
,您可以使用 Observable
来避免这种情况。
附加信息
上面的代码片段只是一个示例。RxJava
包含更多与 观察者模式
相关的功能。
附加信息 - Android 中事件驱动编程(RxJava)的好处
大多数 Android 应用程序
是基于用户或数据 交互
构建的。 (例如,当发生交互时,GUI 更新)。 因此,我们将这些视为一组事件,并基于此设计和构建应用程序对于内部和外部事件来说非常直观和合适。