自動生成された 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 付き)