【问题标题】:How to replace Disposable with Observable如何用 Observable 替换 Disposable
【发布时间】:2019-05-14 18:29:36
【问题描述】:

我是 RxJava 的新手。

我学到的第一件事是观察者模式由两个组件组成(其中包括):ObservablesObservers

在下面的代码中什么是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

【问题讨论】:

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


    【解决方案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(用于记录订阅Observers 的挂钩)。所以像这样的东西(未经测试,在我的脑海中写下):

    fun loadJson() : Observable<Article> = client.getAllArticles().subscribeOn(Schedulers.io())
    

    observeOn真的是为Observer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2018-12-10
      • 2016-09-19
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多