在Observable.defer中调用Observer的onNext元文件

时间:2017-01-17 16:13:56

标签: android rx-android reactivex

我是一名新的反应型程序员。我想延迟调用观察者的onNext方法是否有任何好办法?

以例如 -

Observable.create(new Observable.OnSubscribe<Integer>() {
    @Override
    public void call(Subscriber<? super String> observer) {
        try {
            if (!observer.isUnsubscribed()) {

                // While using create, can call observer.onNext        
                for(int i=0;i< 10 ;i++)
                    observer.onNext("");

                observer.onCompleted();
            }
        } catch (Exception e) {
            observer.onError(e);
        }
    }
});

Observable.defer( new Func0<Observable<String>>() {

    @Override
    public Observable<String> call() {

        // I want call observer.onNext("") here   

                 return Observable.just("");
    }

});

1 个答案:

答案 0 :(得分:0)

因为您只能从一个订阅者调用onNext。我想说创建一个订阅者,然后从这个订阅者调用onNext,如下所示:

final Subscriber<String> subscriber = new Subscriber<String>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(String s) {

        }
    };

    Observable.defer(new Func0<Observable<String>>() {

        @Override
        public Observable<String> call() {

            // I want call observer.onNext("") here

            subscriber.onNext("Test");
            return Observable.just("dasdsa");
        }

    });

但是,你也可以订阅这个可以在subscribe方法中调用这个“onNext”的observable,如:

Observable.defer(new Func0<Observable<String>>() {

        @Override
        public Observable<String> call() {

            // I want call observer.onNext("") here
            return Observable.just("dasdsa");
        }

    }).subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            //on Next was called after the subscribe
        }
    });

我认为由你决定什么更有用,我希望我能够提供帮助!