RxJava:如何使一次获取和重用可观察到?

史蒂文·斯科恩(Steven Schoen):

每次启动应用程序时,我都有一个Retrofit Observable,它可以从服务器获取用户的用户名。我想对每个后续订阅者都使用此值,但是似乎每次我调用subscribe()时,都会从网络中重新获取该值。由于用户名在应用程序的生命周期中不太可能更改,因此我没有重新创建Observable对象,只实例化了一次。

我希望它如何工作是:

一次创建可观察对象

一次获取用户名,将该值保存在Observable中

订阅时,使用保存的值,或者如果尚未完成获取,请等待其获取

我应该怎么做?

Rob Worsnop:

为了详细说明David的正确答案,以下代码说明了的用法cache

public class Caching {
    public static void main(String[] args) throws IOException {
        Observable<String> observable = doSomethingExpensive().cache();
        observable.subscribe(System.out::println);
        observable.subscribe(System.out::println);
    }

    private static Observable<String> doSomethingExpensive(){
        return Observable.create(subscriber -> {
            System.out.println("Doing something expensive");
            subscriber.onNext("A result");
            subscriber.onCompleted();
        });
    }
}

请注意,即使您两次获得结果,也只会做一次昂贵的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章