我试图在RxJava
的{{1}}上使用onPostExecute()
实施一个Observable / Subscriber,但我还是不知道如何建立连接。
我在AsyncTask
方法中创建了Observable
。我希望onPostExecute
订阅此内容。我该如何设置?
MyFragment
答案 0 :(得分:4)
实际上RxJava应该取代AsycTask。事实上,我可以放心地说,AsyncTask是RxJava的一个子集。
在RxJava中,订阅者类似于AsyncTask.progressUpdate
或onPostExecute
,并且doInBackground
中的进程可观察到。数据从Observable发送到Subscriber,并且此流中的任何更改都使用映射方法完成。您现在可能不需要映射,所以我会像这样重新配置我的RxJava:
Observable<String> myObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
try{
String res = ...//your original doInBackground
subscriber.onNext(res);
// onNext would be comparable to AsyncTask.onProgressUpdate
// and usually applies when backgorund process runs a loop
subscriber.onCompleted();
}catch (SomeException e){
// if the process throws an exception or produces a result
// you'd consider error then use onError
subscriber.onError(e);
}
}
}
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) // If subscriber runs on UI thread
.subscribe(new Subscriber<String>() {
@Override
public void onNext(String response) {
// result from Observable.onNext. The methods below correspond
// to their Observable counterparts.
}
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
});
AndroidSchedulers
在RxAndroid中可用。要使用它,请将此行添加到build.gradle:
compile 'io.reactivex:rxandroid:0.24.0'