AsyncTask中的Observable / Subscriber

时间:2015-05-20 14:21:52

标签: android rx-java observable

我试图在RxJava的{​​{1}}上使用onPostExecute()实施一个Observable / Subscriber,但我还是不知道如何建立连接。 我在AsyncTask方法中创建了Observable。我希望onPostExecute订阅此内容。我该如何设置?

MyFragment

1 个答案:

答案 0 :(得分:4)

实际上RxJava应该取代AsycTask。事实上,我可以放心地说,AsyncTask是RxJava的一个子集。

在RxJava中,订阅者类似于AsyncTask.progressUpdateonPostExecute,并且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'