我正在使用自动生成的 AWS Android SDK 来访问我的 REST API。例子
Repos = restClient.getRepos();
此调用需要在异步任务中,但我将其转换为 Observable
final Observable reposRx = Observable.fromCallable(() -> restClient.getRepos());
使用 REST API 的 http 客户端使用令牌进行身份验证,如果我从 REST API 执行方法并且令牌已过期,它将引发错误,因此在我执行任何 REST 调用之前,我需要检查令牌是否已过期(这只是检查检查变量的同步方法完成),如果它已过期,那么我需要通过执行另一个异步网络调用来更新它。
if(isTokenExpired()) {
refreshToken((new RefreshIdTokenCallback() {
@Override
public void onSuccess(final String idToken)
{
getRepos()
}
@Override
public void onFailure(final Throwable error)
{
//How to connect it with Rx
}
});
}
else
{
getRepos()
}
因此,在更新令牌后,我现在可以执行原始的 rest api 调用。
public void getRepos()
{
reposRx
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Repos>() {
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
@Override
public void onNext(final Repos repos) {
//update the list
}
});
}
是否有任何神奇的方法可以将所有内容转换为 RxJava,并且还有一种方法可以与所有 REST API 方法一起重用,检查令牌过期,如果过期刷新并调用 REST API。并且还连接了 onFailed ? (全部带 Rx)