使用 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
}
});
刚开始学习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
}
});