使用 rxjava2 执行后台任务

Do background tasks using rxjava2

刚开始学习RxJava2。在我的应用程序中,我想查询 firebase 并将一些数据存储在数据库中。问题是我对如何将它与 RxJava 一起使用感到困惑。如果你能为我提供一个开始,以便我可以继续工作,请。我发现有很多解决方案,所以我对使用什么以及何时使用感到困惑。 我尝试使用 Single 运算符,它会发出成功或失败但卡在中途。

我是这样使用它的: 首先,我创建一个摘要 class :

public abstract class AsyncCommand<T> {


    public ObservableEmitter<T> mSubscriber;

    public ObservableEmitter<T> getSubscriber() {
        return mSubscriber;
    }

    public abstract T run() throws Exception;

    public Observable<T> returnObservable() {
        return Observable.create(
                new ObservableOnSubscribe<T>() {
                    @Override
                    public void subscribe(ObservableEmitter<T> subscriber) throws Exception {
                        mSubscriber = subscriber;
                        try {
                            subscriber.onNext(run());
                            subscriber.onComplete();
                        } catch (Exception e) {
                            subscriber.onError(e);
                        }
                    }
                }
        ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
    }
}

并且,Util.doesHostExist(mEmail) 将在此示例中的 io 线程中执行:

class VerifiyEmailDomain extends AsyncCommand<Boolean> {
    private final Context mContext;
    private final String mEmail;

    public VerifiyEmailDomain(Context context, String email) {
        mContext = context;
        mEmail = email;
    }

    @Override
    public Boolean run() throws Exception {
        return Util.doesHostExist(mEmail);
    }
}

使用它:

verifiyEmailDomain(context, email).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean result) throws Exception {
                 //do stuff in normal case
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
               // do stuff if exception occurs
            }
        });