Используя 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);
Если метод возвращает строку, он должен работать нормально. Можете ли вы опубликовать код, который * не работает *, а не код, который работает? :) Также я помню, используя этот французский учебник, чтобы играть с RxJava в прошлом http://blog.xebia.fr/2014/01/10/android-oubliez-definitivement-les-asynctask-avec-rxjava/, вы можете видеть код частей для вдохновения, если вы не понимаете французский. –
Спасибо @PhilippeA, что сработало. Я хотел запустить функцию, возвращающую 'void', но теперь я возвращаю Dummy String, и это работает. – user1406716
@ user1406716: Похоже, вы используете некоторые побочные эффекты в своем 'OnSubscribe.call()' - в этом случае я бы посоветовал вам более серьезно подумать о проблеме. В этом смысле funtion - это не то, что вы можете «запустить», а то, что принимает входные данные и генерирует вывод * из этого ввода *. IMO, RxJava лучше всего работает, если ваши Observables представляют собой чистые (то есть побочные эффекты) потоки данных и если вы делаете побочные эффекты в своем «подписчике». –