19

otto と を使用して UI に応答を投稿するには、次の方法がありAsyncTaskます。

private static void onGetLatestStoryCollectionSuccess(final StoryCollection storyCollection, final Bus bus) {
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            bus.post(new LatestStoryCollectionResponse(storyCollection));
            return null;
        }
    }.execute();
}

これをRxAndroid ライブラリAsyncTaskRxJava使用するように変換するには、助けが必要です。

4

3 に答える 3

11

これは、RxJava を使用したファイル ダウンロード タスクの例です。

Observable<File> downloadFileObservable() {
    return Observable.create(new OnSubscribeFunc<File>() {
        @Override
        public Subscription onSubscribe(Observer<? super File> fileObserver) {
            try {
                byte[] fileContent = downloadFile();
                File file = writeToFile(fileContent);
                fileObserver.onNext(file);
                fileObserver.onCompleted();
            } catch (Exception e) {
                fileObserver.onError(e);
            }
            return Subscriptions.empty();
        }
    });
}

使用法:

downloadFileObservable()
  .subscribeOn(Schedulers.newThread())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(observer); // you can post your event to Otto here

これにより、新しいスレッドでファイルがダウンロードされ、メイン スレッドで通知されます。

OnSubscribeFunc廃止されました。OnSubscribeinstedを使用するようにコードが更新されました。詳細については、Github の issue 802 を参照してください。

コードはこちらから。

于 2015-07-23T16:52:07.997 に答える
6

あなたの場合、使用できますfromCallable。より少ないコードと自動onError排出。

Observable<File> observable = Observable.fromCallable(new Callable<File>() {
        @Override
        public File call() throws Exception {
            File file = downloadFile();
            return file;
        }
    });

ラムダの使用:

Observable<File> observable = Observable.fromCallable(() -> downloadFile());
于 2016-11-24T03:04:06.487 に答える