我正在尝试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的新功能让我感到困惑。 :(
答案 0 :(得分:0)
从我的评论中:如果源完成,则重复操作。添加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 ****
}
});
}