2017-01-17 11 views
1

Я новый реактивный программист. Я хотел бы назвать метод наблюдателя onNext в отсрочке, есть ли хороший способ сделать это?Метод вызова Observer onNext в Observable.defer

Возьмите для ПРИМЕР-

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

}); 

ответ

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

    }); 

Но, вы также можете подписаться этой наблюдаемой, который бы назвал это «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 
     } 
    }); 

Я думаю, что вам решать, что более полезно, я надеюсь, что смогу помочь!