我想在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>
如何修复代码?
答案 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
。