Android 在配置更改期间使用RxJava临时保存变量
我在一个Android项目上使用RxJava,希望确保我正确地实现了一些东西 我正在使用Observable登录到服务器。登录后,我可能希望在客户端保存用户名,因此我使用doOnNext操作符来完成此操作。下面是一个这样的示例:Android 在配置更改期间使用RxJava临时保存变量,android,rx-java,Android,Rx Java,我在一个Android项目上使用RxJava,希望确保我正确地实现了一些东西 我正在使用Observable登录到服务器。登录后,我可能希望在客户端保存用户名,因此我使用doOnNext操作符来完成此操作。下面是一个这样的示例: Observable<Response<Void>> doLogin(Observable<Response<Void>> retainedObservable, Subscriber subscriber, String
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;
}
如果设备在登录完成之前进行了配置更改,我希望能够重新订阅正在运行的observable,这样我就不必要求用户重新输入他们的凭据,再次按下登录按钮
为了实现这一点,我最初称之为多洛金。。。并将返回的可观测数据临时保存在数据持有者类中。如果设备经历了配置更改,我可以从数据持有者类中获取已经创建的可观察对象并重新订阅。这很好,我唯一的问题是我还需要暂时保存用户名、密码和saveUsername标志。这很容易做到,但是我想知道是否有一种方法可以利用RxJava在Observable中保存这些值,并且在doOnNext中需要它们时仍然可以访问它们。。。。如果我不这样做,只是重新订阅可观察的,那么当doOnNext。。。运行时,我将没有saveUsername标志或用户名的值,这显然是错误的
如果只需要保留可观察对象,并以某种方式保留用户名、密码和saveUsername标志,那就太好了。如果我希望在配置更改期间保留这些变量,那么有没有办法在RxJava中实现这一点,或者我目前的做法是否需要这样做?基本上是这样的。RxJava使用一个功能性的、无状态的API,因此除了它返回的值之外,您实际上不能或不应该向可观察对象附加额外的数据 与函数式语言一样,通常有两种方法: 您可以在闭包中捕获其他值,类似于 你现在正在做。但显然,这些价值观只会 在所述闭包的范围内可访问,因此不能返回 可以从方法中观察到,并且仍然可以访问用于 以后再创建它。 如果以后确实需要访问该数据,通常的方法是创建某种包含所有数据的结果对象。例如,LoginResult类,它包含您的响应以及原始登录数据。
retainedObservable和cachedObservable应该是相同的吗?目前retainedObservable实际上似乎并没有用于任何好的捕获。我把它调错了。现在修好了。