繁体   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