2015-09-02 2 views
2

Используя AsyncTask для запуска некоторых задач, я получаю сбои, поэтому я пытаюсь перейти к RxJava.Как использовать RxJava.Observable вместо AsyncTask?

я могу получить следующий код для запуска, который печатает Hello World!, но как я могу выполнить функции вместо того, чтобы просто Hello World! ???? Размещение функции дает синтаксическую ошибку.

Observable<String> myObservable = Observable.create(
      new Observable.OnSubscribe<String>() { 
       @Override 
       public void call(Subscriber<? super String> sub) { 
        sub.onNext("Hello, world!"); 
        sub.onCompleted(); 
       } 
      } 
    ); 


    Subscriber<String> mySubscriber = new Subscriber<String>() { 
     @Override 
     public void onNext(String s) { 
      mLogger.printToLog(className + " -> " + MethodName.methodName() + ": s =" + s); 
     } 

     @Override 
     public void onCompleted() { 
     } 

     @Override 
     public void onError(Throwable e) { 
     } 
    }; 

    //Should Output Hello, World! AND IT DOES! 
    myObservable.subscribe(mySubscriber); 
+1

Если метод возвращает строку, он должен работать нормально. Можете ли вы опубликовать код, который * не работает *, а не код, который работает? :) Также я помню, используя этот французский учебник, чтобы играть с RxJava в прошлом http://blog.xebia.fr/2014/01/10/android-oubliez-definitivement-les-asynctask-avec-rxjava/, вы можете видеть код частей для вдохновения, если вы не понимаете французский. –

+0

Спасибо @PhilippeA, что сработало. Я хотел запустить функцию, возвращающую 'void', но теперь я возвращаю Dummy String, и это работает. – user1406716

+1

@ user1406716: Похоже, вы используете некоторые побочные эффекты в своем 'OnSubscribe.call()' - в этом случае я бы посоветовал вам более серьезно подумать о проблеме. В этом смысле funtion - это не то, что вы можете «запустить», а то, что принимает входные данные и генерирует вывод * из этого ввода *. IMO, RxJava лучше всего работает, если ваши Observables представляют собой чистые (то есть побочные эффекты) потоки данных и если вы делаете побочные эффекты в своем «подписчике». –

ответ

0

Просто сделайте свой метод возвратом строки, и все должно быть хорошо.

0

Возможно, вы ищете doOnNext():

myObservable.doOnNext(runSomething()).subscribe(); 
Смежные вопросы