我是RxJava的新手。
我学到的第一件事之一是,观察者模式包括两个组件(除其他外):可观测的、和观察者。
在下面的代码中,什么是可观察的,什么是观察者?
class JsonRepository{
private val client by lazy {
Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://jsonplaceholder.typicode.com/")
.build()
.create(JsonApi::class.java)
}
var disposable: Disposable? = null
var allArticles: List<Article> = emptyList()
fun loadJson(){
disposable = client.getAllArticles()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ result -> allArticles = result },
{ error -> Log.e("ERROR", error.message) }
)
}
}此外,如何更改代码,使我可以使用可观察的或流动的,而不是可处理的
发布于 2019-05-14 18:51:29
可观察
检查client.getAllArticles()、.subscribeOn(Schedulers.io())、.observeOn(AndroidSchedulers.mainThread())链中所有事物返回的内容。这三个调用中的每一个都返回一个Observable (在某种转换之前或之后)。
链中的最后一个(.observeOn(AndroidSchedulers.mainThread())的结果)是您使用的最终Observable。

这是Observer__将观察到的事情。
观察者
来自RxJava文档
订阅方法是如何将观察者连接到可观察到的对象。您的观察者实现了以下方法的某些子集: onNext ... onError ... onCompleted ...

问题
此外,如何更改代码,使我可以使用可观察的或流动的,而不是可处理的
通常,您只需公开一个Observable,并让存储库的“用户”创建一个Observer并管理Disposable (用于记录订阅Observers的钩子)。所以像这样的东西(没有经过测试,写在我的头顶上):
fun loadJson() : Observable<Article> = client.getAllArticles().subscribeOn(Schedulers.io())(observeOn确实是为Observer服务的)
https://stackoverflow.com/questions/56136490
复制相似问题