正确使用 Observable (RxJava)

Proper use of Observable (RxJava)

我已经在使用 RxJava + Retrofit + EventBus。效果很好!

但我不完全理解如何使用 Rx Observable 如此简单 AsyncTask

我会稍微解释一下:

例如我有一个方法,我想在后台执行(而不是在 UI 线程中):

    public void teachMe() {
      for(int i=0;i< daysUntilGenius;i++){
            Log.e("WORK DAY" , String.valueOf(i));
          }
    }

当这个方法完成时,我想切换到主线程并显示 toast 或其他东西。

使用 AsynсTask 我可以简单地使用方法 doInBackgroundonPostExecute 来完成,但我想使用 Rx ObservableSubscriber 来完成。 我已经使用过调度程序,所以我知道如何在线程之间切换,我只是不知道如何将所有这些放在一起并使其工作!

我需要示例或代码片段,并进行一些解释,谢谢!

您可以尝试这样的操作:

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));
    }
}

最后我找到了解决方案:

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));
      }
}