簡體   English   中英

RxJava:如何使一次獲取和重用可觀察到?

[英]RxJava: How do I make a fetch-once-and-reuse Observable?

在每次啟動應用程序時,我都有一個Retrofit Observable,它可以從服務器獲取用戶的用戶名。 我想對每個后續訂閱者都使用該值,但似乎每次我調用subscribe()時,都會從網絡中重新獲取該值。 由於用戶名在應用程序的生命周期中不太可能更改,因此我不會重新創建Observable對象,只能實例化一次。

我希望它如何工作是:

一次創建可觀察對象

一次獲取用戶名,將該值保存在Observable中

訂閱時,使用該保存的值,或者如果尚未完成獲取,請等待其獲取

我應該怎么做?

為了詳細說明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();
        });
    }
}

請注意,即使您兩次獲得結果,也只會做一次昂貴的事情。

您可以使用cache()來檢索第一個訂閱者的用戶名,然后將值重播給隨后的所有訂閱者(當然包括第一個)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM