我在使用Retrofit的Activity中有一个很好的处理登录服务,其中Observable返回类型为:
mApiService.login(new LoginRequest("username", "password"))
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.doOnNext(loginObjectResponse -> /* write to disk */ )
.flatmap(loginObjectResponse -> /* manipulate */)
.subscribe(loginObjectResponse -> /* update UI */, e -> /* update UI */);
我想做的是将doOnNext和flatmap中的逻辑拉出到一个单独的类中,最终将Activity简化为:
mManager.login("username", "password")
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(booleanResult -> /* update UI */, e -> /* update UI */);
在我的经理类中处理API服务调用。
我正在寻找有关实现这一目标的最佳方法的建议。我显然喜欢我的经理类返回一个Observable,但是我可以继续使用Retrofit Observable(并包装订阅吗?)或者我最好只是让它更加同步并创建并返回一个简单的Observable ?
更新
我遇到了一些样本,这些样本让我考虑通过在我的经理类中构建操作链并在我的Activity中订阅时执行它来实现不同的处理。我的经理方法现在使用延迟和类似:
public Observable login(String username, String password) {
return Observable.defer(() ->
mApiService.login(new LoginRequest(username, password))
.doOnNext(loginResponse -> /* write to disk */ )
.flatMap(loginResponse -> return Observable.just(loginResponse); )
);
}
我的活动订阅如上所示。
希望能够洞察我是否参与其中,或者有关如何更好地处理此用例的任何建议。谢谢!
UPDATE2
所以推迟在这里没有任何意义。登录方法归结为:
public Observable login(String username, String password) {
return mApiService.login(new LoginRequest(username, password))
.doOnNext(loginResponse -> /* write to disk */ )
.flatMap(loginResponse -> return Observable.just(loginResponse); )
);
}
仍然希望对此方法有任何意见/改进。我遇到的大多数示例只是做他们订阅的所有事情。