RxJava:如何制作一次获取并重用的 Observable?

2024-01-29

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

我希望它的工作方式是:

创建一次 Observable

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

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

我该怎么办?


为了详细说明大卫的正确答案,这里有一些代码说明了如何使用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();
        });
    }
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxJava:如何制作一次获取并重用的 Observable? 的相关文章

随机推荐