【发布时间】:2018-04-11 18:22:43
【问题描述】:
我有这个问题。我正在尝试将本地数据库与远程应用程序同步到我的 android 应用程序中。我正在创建上传本地创建的新信息的逻辑,服务器使用远程 ID 响应并将其保存在服务器中。为了存档这个,我使用了一个方法,它接受一个对象数组并返回一个 Observable,它为每个元素发出服务器的响应。 像这样。
val dailyEntries = App.db.dailyEntryDao().getDailyEntriesCreated()
dailyEntries.sync(context) //Return an observable
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
val response = DailyEntry(it)//Creates a daily entry using
the response from the server
thread {
App.db.dailyEntryDao().update(response)
}
}, {
it.printStackTrace()
}, {
uploadEnclosures()
})
你怎么看,在onSuccess中从当前observable调用了另一个方法。它使用相同的逻辑并且显示在前面。
private fun uploadEnclosures() {
thread {
val enclosures = App.db.enclosureDao().getEnclosuresCreated()
enclosures.sync(context)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
val response = Enclosure(it)
thread {
App.db.enclosureDao().update(response)
}
}, {
it.printStackTrace()
}, {
uploadSmokeTest()
})
}
}
所有表格都继续。我们总是在当前 Observable 的 onSuccess 中执行下一个表的更新。这样做是因为我需要按特定顺序进行同步。
我的问题是,有没有办法将所有这些 Observable 合并为一个来执行单个订阅并控制每个 onNext 情绪?
感谢您的回答
【问题讨论】:
-
thread {?在 RxJava 订阅者中启动后台线程?那么observeOn()和subscribeOn()是干什么用的? -
这是因为 val enclosures = App.... 从房间表中检索信息。观察在 MainThread 中很有用,以防我想通知 de UI 任何更改。您是否建议进行任何更改?
标签: android kotlin rx-java reactive-programming rx-kotlin