RxJava2如何从调用它的方法中返回onSuccess的结果?

时间:2018-06-02 13:43:26

标签: java kotlin rx-java2

rxjava:2.1.14
rxandroid:2.0.2
Android Studio 3.2 Canary

我有以下方法将检索已排序行的游标。

但是,此方法需要返回游标。但是,没有办法 当onSuccess方法返回void时,我可以返回光标。

只是想知道如何从onSuccess中获取光标并从方法中返回它?

public Cursor queryAllInsects(String sortOrder) {
        insectStorageInteractorImp.getAllSortedInsects(sortOrder)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<Cursor>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onSuccess(Cursor cursor) {
                        return cursor; /* anyway I can return the cursor in this method */
                    }

                    @Override
                    public void onError(Throwable e) {
                    }
                });
    }

InsectStorageInteractorImp.kt

override fun getAllSortedInsects(sortOrder: String): Single<Cursor> {
    return Single.fromCallable {
        insectStorageImp.queryAndSort(sortOrder)
    }
}

非常感谢任何建议,

1 个答案:

答案 0 :(得分:2)

你不能(从技术上讲,你可以,但它会打破使用RxJava的重点,并且严格地比仅仅更改getAllSortedInsects以返回Cursor更糟糕(不要考虑这个建议更改getAllSortedInsects以返回Cursor))。

但是在Kotlin你可以做一些看起来的东西非常像返回一个Cursor,并且可以与coroutines类似地使用:

public suspend fun queryAllInsects(sortOrder: String): Cursor =
    insectStorageInteractorImp.getAllSortedInsects(sortOrder)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .await()

有关协同程序的信息,请参见https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md,有关RxJava2集成的信息,请参见https://github.com/Kotlin/kotlinx.coroutines/tree/master/reactive/kotlinx-coroutines-rx2

或者,根本不要打扰RxJava2并使用协同程序进行所有异步。