android - 从 Observable 更新新 API 数据的 UI
问题描述
我太新手了,无法自己处理。我有一种方法,其中一些 API 数据存储在 Observable 中,我试图每 60 秒触发一次此事件。我这样做是因为我想为 recyclerView 提供实际数据。如果新数据从 API 到达,recyclewView应该刷新。
这是我从 API 获取数据的方法:
fun getHead(status : String , wenr : Long, test : Boolean) {
view.onShowDialog("")
val headResponseObservable: Observable<List<WeKopf>> = apiService.getWEKopf(status, wenr, test) // an action must be done each time when a property’s value changes.
Observable.interval(60, TimeUnit.SECONDS)
.flatMap<Any> { n -> headResponseObservable }
.repeat()
.subscribe()
subscribe(headResponseObservable, this, mainScheduler)
}
订阅方法如下所示:
protected fun <T> subscribe(observable: Observable<T>, observer: Observer<T>, scheduler : Scheduler) {
observable.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.computation())
.observeOn(scheduler)
.subscribe(observer)
}
问题是 Observable 只向 Observer 发送数据一次。之后,UI 不会自行刷新。
override fun onComplete() {
view.onHideDialog()
}
override fun onSubscribe(d: Disposable) {
addToCompositeDisposable(d)
}
override fun onNext(t: List<WeKopf>) {
view.onHideDialog()
view.displayHeads(t)
}
override fun onError(e: Throwable) {
view.onHideDialog()
view.onError("Error getting supplier head: " + e.message)
}
当发出来自 Observable 的新数据时,如何扩展 Observer 以响应事件驱动?我正在寻找类似的东西,它只会刷新 recyclewView。
目前,只有当我一遍又一遍地手动调用自己的- 方法时,我才能刷新 UI。getHead
太感谢了。
解决方案
据我了解,您的问题getHead()
应该被调用一次,对吗?在这种情况下,我将为您提供以这种方式简化代码的方法:
fun getHead(status: String, wenr: Long, test: Boolean): Observable<List<WeKopf>> =
Observable.interval(60, TimeUnit.SECONDS)
.flatMap { apiService.getWEKopf(status, wenr, test) }
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.computation())
.observeOn(scheduler)
.also {
view.onShowDialog("")
}
然后你应该订阅你getHead()
喜欢的结果:
getHead(status, wenr, test).subscribe(observer)
顺便说一句,不要忘记处理你的Disposable
物品。
推荐阅读
- vue.js - vue-router@4.0.11 无法匹配路由
- javascript - vuejs:我的 vue 组件没有渲染
- json - sed 从 json 字符串中删除 json 子对象
- spring-boot - 从 Spring 应用程序到 Kubeflow API 的 RestCalls
- flutter - Flutter 将 TextFormField 与 maxLength 对齐
- javascript - 使用 sin 和 cos Canvas Js 增加围绕中心的旋转角度
- python - conda 导出环境和包
- php - windows服务器上xampp的MYSQL/PHP错误
- c++11 - 为什么我们要在声明时初始化数据成员(不一定在构造函数上)?
- c# - c# protobuf System.Runtime.CompilerServices.Unsafe