我是RxJava的新手。
我学到的第一件事是观察者模式包括两个组成部分(除其他外):可观察的和观察者
在下面的代码中,什么是Observable,什么是Observer?
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) }
)
}
}
此外,如何更改代码,以便可以使用Observable或Flowable代替Disposable
答案 0 :(得分:1)
检查链client.getAllArticles()
,.subscribeOn(Schedulers.io())
,.observeOn(AndroidSchedulers.mainThread())
中所有事物返回的内容。这三个调用中的每个调用都会返回Observable
(在某种转换之前或之后)。
链中的最后一个(.observeOn(AndroidSchedulers.mainThread())
的结果)是您最终使用的Observable
。
Observer
将要观察的东西。
来自RxJava docs:
Subscribe方法是将观察者连接到Observable的方式。您的观察者实现了以下方法的一部分:
onNext [...]
onError [...]
onCompleted [...]
此外,如何更改代码,以便可以使用Observable或Flowable代替Disposable
通常,您只需公开一个Observable
,然后让存储库的“用户”创建一个Observer
并管理Disposable
(用于记录订阅的{{1} }。这样的事情(未经测试,写下我的头顶):
Observers
({fun loadJson() : Observable<Article> = client.getAllArticles().subscribeOn(Schedulers.io())
确实是observeOn
的意思)