如何从订阅或地图返回Observable?

时间:2019-05-05 19:08:00

标签: android kotlin rx-java

我想在Subscribe函数中返回Observable,但是我阅读了不可能的文档。 所以我尝试通过使用地图功能。但是,它产生了错误。

这是代码:

interface DataSource {

    fun getItem() : Observable<List<RetroCrypto>>
}

//

object RemoteDataSource : DataSource {

private val myCompositeDisposable by lazy { CompositeDisposable() }

override fun getItem() : Observable<List<RetroCrypto>> {

    val retrofit = RetroClient.getRetrofit()
    val requestInterface = retrofit.create(GetData::class.java)

    myCompositeDisposable.add(requestInterface.getData()
        // Send the Observable’s notifications to the main UI thread
        .observeOn(AndroidSchedulers.mainThread())
        // Subscribe to the Observer away from the main UI thread
        .subscribeOn(Schedulers.io())
        .map { return it }

    )
}

}

getRetrofit 是用于构建改造实例的方法。

我不知道上面的代码为什么会产生错误。

错误是

1. Return is not allowed here

2. Type mismatch. Required : Observable<List<RetroCrypto>> , Found : List<RetroCrypto>

如何修复代码?

1 个答案:

答案 0 :(得分:0)

map的lambda中,您将元素放入Observable内,因此在您的情况下,it似乎是List<RetroCrypto>。 如果要返回Observable,则必须执行以下操作:

object RemoteDataSource : DataSource {

    private val myCompositeDisposable by lazy { CompositeDisposable() }

    override fun getItem(): Observable<List<RetroCrypto>> {

        val retrofit = RetroClient.getRetrofit()
        val requestInterface = retrofit.create(GetData::class.java)

        val observable = requestInterface.getData()
                // Send the Observable’s notifications to the main UI thread
                .observeOn(AndroidSchedulers.mainThread())
                // Subscribe to the Observer away from the main UI thread
                .subscribeOn(Schedulers.io())

        return observable
    }
}

注意:只有订阅后,您才能一次性添加到myCompositeDisposable,因此您将不得不在此功能之外进行myCompositeDisposable.add