2016-03-19 3 views
0

У меня очень простой излучатель RXJava. Фактически это publishSubject, но его задача конвертировать целые числа в строки и обновлять элемент пользовательского интерфейса после его подписания. Код выглядит следующим образом:RxJava - единственное Наблюдаемое исполнение сразу - почему?

PublishSubject integerToStringEmitter = PublishSubject.create(); 

    Subscription mysingle= Single.just(4).map(new Func1<Integer, String>() { 


     @Override 
     public String call(Integer integer) { 
      return String.valueOf(integer); 
     } 
    }).subscribe(new Observer<String>() { 
     @Override 
     public void onCompleted() { 

     } 

     @Override 
     public void onError(Throwable e) { 

     } 

     @Override 
     public void onNext(String s) { 
      tv.setText(s); 
     } 
    }); 
// integerToStringEmitter.subscribe(); //it still emits even without this, why ? 

Что я хочу случиться: для подписки только начинаются, когда я называю integerToStringEmitter.subscribe();

Что происходит в настоящее время: Как только я запускаю программу, onNext получает вызов, а элемент пользовательского интерфейса устанавливается на # 4. Почему? мне нужно больше контролировать эту штуку, чтобы она не выполнялась сразу без меня, даже подписавшись на нее. Помогите решить.

ответ

2

Я не уверен, чего вы пытаетесь достичь. Ваш код выглядит неправильно и даже не компилируется. Если он скомпилирует, то подписка (новая часть Observer() {..., очевидно, будет инициировать поток событий.

Вот простой пример наблюдаемых испускающих целых чисел и их сопоставление со строками и подписчиком Observer:

Observable<String> myObservable = Observable.just(1, 2, 3, 4).map(new Func1<Integer, String>() { 
    @Override 
    public String call(Integer integer) { 
     return String.valueOf(integer); 
    } 
}); 

Subscriber<String> mySubscriber = new Subscriber<String>() { 
    @Override 
    public void onCompleted() { 
     System.out.println("onCompleted"); 
    } 

    @Override 
    public void onError(Throwable e) { 
     System.out.println("onError: " + e.getMessage()); 
    } 

    @Override 
    public void onNext(String s) { 
     System.out.println("onNext: " +s); 
    } 
}; 

myObservable.subscribe(mySubscriber); 
+0

Он компилируется в порядке. Мне не хватало, чтобы не зацепить подписчика. Спасибо, хороший совет. – j2emanue

Смежные вопросы