我已使用RxJava
+ Retrofit
+ EventBus
。它很棒!
但我不完全明白如何使用Rx Observable
作为简单的AsyncTask
。
我会解释一下:
例如,我有一个方法,我想在后台(而不是在UI线程中):
public void teachMe() {
for(int i=0;i< daysUntilGenius;i++){
Log.e("WORK DAY" , String.valueOf(i));
}
}
当这个方法完成后,我想切换到主线程并显示吐司或其他东西。
使用AsynсTask我可以使用方法doInBackground
和onPostExecute
来完成,但我想使用Rx Observable
和Subscriber
来完成。
我alredy使用Schedulers,所以我知道如何在线程之间切换,我只是不知道如何将我的所有这些放在一起并使其工作!
我需要和示例或代码片段稍微解释一下,谢谢!
答案 0 :(得分:0)
您可以尝试这样的事情:
public void doAsyncStuff(int days) {
Observable
.just(days)
.subscribeOn(Schedulers.newThread())
.doOnEach(n -> teachMe(n))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(n -> Log.i("Completed " + n));
}
public void teachMe(int daysUntilGenius) {
for(int i = 0; i < daysUntilGenius; i++){
Log.e("WORK DAY", String.valueOf(i));
}
}
答案 1 :(得分:0)
最终我找到了解决方案:
public Subscription test(final int days){
return Observable.create(new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
teachMe(days);
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Void>() {
@Override
public void onCompleted() {
Toast.makeText(MainActivity.this.getApplicationContext(),"COMPLETE",Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Void aVoid) {
}
});
}
public void teachMe(int days) {
for(int i=0;i< daysUntilGenius;i++){
Log.e("WORK DAY" , String.valueOf(i));
}
}