簡體   English   中英

可見不重復

[英]Observable not repeating

我試圖在一個可觀察到的動作中repeat()一個動作,但是它執行的次數不止一次。

Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        public void subscribe(ObservableEmitter<String> e) throws Exception {
            // **** Code Here is not repeating ****
            e.onNext(pullMessagesFromServer());
        }
    })
    .repeat()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .map(new Function<String, JSONArray>() {
        @Override
        public JSONArray apply(String s) throws Exception {
            return JsonParser.parseString(s);
        }
    })
    .subscribe(new Observer<JSONArray>() {
        @Override
        public void onNext(JSONArray arr) {
            // **** Code Here is not repeating ****
        }  
    });
}

是什么賦予了? 謝謝! Rxjava的新手,這使我有些困惑。 :(

根據我的評論:如果源代碼完整,則重復操作。 添加e.onComplete()

Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        public void subscribe(ObservableEmitter<String> e) throws Exception {
            // **** Code Here is not repeating ****
            e.onNext(pullMessagesFromServer());
            e.onComplete();
        }
    })
    .repeat()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .map(new Function<String, JSONArray>() {
        @Override
        public JSONArray apply(String s) throws Exception {
            return JsonParser.parseString(s);
        }
    })
    .subscribe(new Observer<JSONArray>() {
        @Override
        public void onNext(JSONArray arr) {
            // **** Code Here is not repeating ****
        }  
    });
}

這樣做的原因是, Observable協議可能是異步的,也就是說,事件可能會隨時間到達。 因此,僅因為您的代碼停止了發信號通知事件,庫就不知道不會再有其他事件了。 您必須明確指出使用create()時將不再發射任何值。 通常,您可以使用其他工廠方法,例如fromCallable ,以確保可以正確發出單個生成值的信號:

Observable.fromCallable(new Callable<String>() {
        @Override
        public String call() throws Exception {
            // **** Code Here is not repeating ****
            return pullMessagesFromServer();
        }
    })
    .repeat()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .map(new Function<String, JSONArray>() {
        @Override
        public JSONArray apply(String s) throws Exception {
            return JsonParser.parseString(s);
        }
    })
    .subscribe(new Observer<JSONArray>() {
        @Override
        public void onNext(JSONArray arr) {
            // **** Code Here is not repeating ****
        }  
    });
}

暫無
暫無

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

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