将AsyncTask doInBackground进程转换为RxJava时遇到了挑战。我很想知道如何将其转换为Rx Java,因为我没有尝试过。
new AsyncTask<Void, Void, Integer>() {
@Override
protected Integer doInBackground(Void... voids) {
return mDAO.getCount();
}
@Override
protected void onPostExecute(Integer count) {
if (count == 0)
mCount.setText("All Notifications");
else
mCount.setText("New Notificaiton "+count);
}
}.execute();
我为Rx尝试了这个
Observable<Integer> count = Observable.fromCallable(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return mDAO.getCount();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
count.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
mDisposable.add(d);
}
@Override
public void onNext(Integer integer) {
if (integer == 0)
mCount.setText("All Notifications");
else
mCount.setText("New Notification "+count);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
我得到这个代替计数
Count io.reactivex.internal.operators.observable.ObservableObserveOn@5ccee5b
我该如何解决?谢谢。
答案 0 :(得分:0)
您的实现就是为什么出现此错误的原因。您应该改为使用单个可调用对象。这应该可以100%进行,如果您有任何挑战,请告诉我。
Single.fromCallable(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return mDAO.getCount();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
if (integer == 0)
mCount.setText("All Notifications");
else
mCount.setText("New Notification "+integer);
}
})
.doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
})
.subscribe();