AndroidプロジェクトでRxJavaを使用していて、何かを正しく実装していることを確認します。RxJavaを使用してコンフィグレーションの変更中に一時的に変数を保存する
Observableを使用してサーバーにログインしています。ログインが行われた後、私はdoOnNext()演算子を使ってこれを行うために、クライアント側にユーザ名を保存することができます。デバイスは、私が依頼する必要がないように走っていた観測可能に再サブスクライブすることができるようにしたいのログインが終了する前に設定の変更を通過する場合
Observable<Response<Void>> doLogin(Observable<Response<Void>> retainedObservable, Subscriber subscriber, String username, String password, boolean saveUsername) {
if (retainedObservable == null) {
retainedObservable = networkLayer.loginWithcredentials(username, password)
.doOnNext(new Action1<Response<Void>>() {
@Override
public void call(Response<Void> voidResponse) {
if (saveUsername) {
databaseLayer.saveUsername(username).subscribe();
} else {
databaseLayer.saveUsername(null).subscribe();
}
}
})
.cache();
}
mSubscription = retainedObservable.subscribeOn().observeOn().subscribe(subscriber);
return retainedObservable;
}
:ここでは、これがどのように見えるかの例を示します。ログインボタンを再度押すというユーザの資格情報を再入力する。
これを達成するために、最初にdoLogin(...)を呼び出して、返された観測値をデータホルダクラスに一時的に保存します。デバイスが設定変更を行った場合、私は既に作成されたobservableをデータ保持者クラスから取得し、それを再登録することができます。これは素晴らしい、私の唯一のハングアップ私は一時的にユーザー名、パスワードとsaveUsernameフラグをオフに保存する必要があることです。これは十分に簡単ですが、RxJavaをObservableで保持してdoOnNext(...)で必要なときにそれらにアクセスできる方法があるのだろうかと思います。 doOnNext(...)が実行されたときにObservableに再登録すれば、私はsaveUsernameフラグや明らかに悪いユーザー名の値を持たないでしょう。
Observableを保持するだけでいいのですが、どうにかしてusername、password、saveUsernameフラグを保持しておくといいでしょう。 RxJavaでこれを達成する方法はありますか、あるいは私が設定変更の間にそれらの変数を保持したい場合、私は現在それを実行する必要がある方法です。
retainObservableとcachedObservableは同じものとしますか?現在、retainObservableは実際には何のためにも使用されていません。 –
良いキャッチです。私はそれを転送する間違いをした。今修正されました。 – neonDion