【问题标题】:Call Observer's onNext metod in Observable.defer在 Observable.defer 中调用 Observer onNext 方法
【发布时间】:2017-01-17 16:13:56
【问题描述】:

我是一名新的反应式程序员。我想在defer中调用观察者的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("");
    }

});

【问题讨论】:

    标签: android rx-android reactivex


    【解决方案1】:

    因为您只能从一个订阅者那里调用 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");
            }
    
        });
    

    但是,你也可以订阅这个 observable,它会在 subscribe 方法中调用这个“onNext”,像这样:

    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
            }
        });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2018-02-20
      相关资源
      最近更新 更多