我是 RxJava 的新手。我的经验主要来自那些教程: Here , 和 here .
现在,我发现自己在使用 Retrofit2 进行 API 调用时会返回 Obesrvable<AccessToken>
。 .客户端将按如下方式调用此服务:
public Observable<TokenResult> authenticateWithClientCredentials() {
return authService.authenticate("client_credentials").take(1);
}
其中一个名为 Authenticator
的类会调用#authenticateWithClientCredentials()
来自客户。
我想要实现的是返回一个 Observable<Boolean>
来自 Authenticator
类,一旦 API 调用完成,即在 onComplete()
中表明访问 token 已被获取并保存在 Authenticator
中的缓存中上课成功。
我尝试了 defer
运算符(operator),但我还是迷路了。
编辑
我知道我可以在参数中传递回调,但 Rx 的想法不就是要取代旧的经典回调方法吗?
最佳答案
如果我没有正确理解您的问题,那么这就是您正在搜索的内容:
client.authenticateWithClientCredentials()
.map(token -> {
// save `token` into cache
return token;
})
.flatMap(integer -> Observable.just(Boolean.TRUE))
.subscribe(aBoolean -> {
// success
}, throwable -> {
// error
});
我不知道你为什么要Observable<Boolean>
, Completable 在这种情况下更受欢迎,因为流要么成功完成,要么没有。不过,使用 Observable<Boolean>
发布了解决方案返回类型。
这是 Completable
方法:
client.authenticateWithClientCredentials()
.flatMapCompletable(integer -> {
// save `token` into cache
return Completable.complete();
})
.subscribe(() -> {
// success
}, throwable -> {
// error
});
关于android - RxJava : Know when observable is finished and return Boolean Observable to the caller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46848019/