これは私がそれを使用する方法です:
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
}
});
代わりObservable.createを使用しての、あなただけのためにObservable.fromCallableの内側にそれをラップすることができますより簡単な実装 – Tuby