[英]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.