将Retrofit与Rxjava结合使用有什么好处?
答案 0 :(得分:38)
<强>问题强>
Retrofit已经在后台线程上运行。那为什么需要另一个后台任务RxJava?
我认为最重要的是,避免嵌套回调(callback hell
)。
例如)回调地狱(改造)
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
包含更多observe pattern
相关功能。
其他 - Android中事件驱动编程的好处(RxJava)
大多数Android application
都是基于用户或数据interaction
构建的。 (例如,当交互发生时GUI更新)。因此,我们将这些视为set of events
,基于此设计和构建应用程序非常直观且适合内部和外部事件。
答案 1 :(得分:9)
要了解这些优势,您必须首先了解代码库采用Reactive Extensions的好处。
可组合性和转型
线程和异步操作
Rx库
除了这些之外还有其他优点,但你可以说,反应是非常有益的。请求是学习使用流并逐渐在代码库中引入越来越多的流逻辑的一个很好的起点。
这不是替代品。 RxJava和Retrofit是一个完美的匹配,这就是为什么首先在Retrofit中为它提供原生支持。