如何用Observable替换Disposable

时间:2019-05-14 18:29:36

标签: android kotlin retrofit2 rx-java2 observer-pattern

我是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

1 个答案:

答案 0 :(得分:1)

可观察

检查链client.getAllArticles().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())中所有事物返回的内容。这三个调用中的每个调用都会返回Observable(在某种转换之前或之后)。

链中的最后一个(.observeOn(AndroidSchedulers.mainThread())的结果)是您最终使用的Observable

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的意思)