我的应用架构,很常见:
如果我有实体列表,请解释我,例如
@Entity(tableName = TABLE_NAME)
class Item constructor(
@PrimaryKey(autoGenerate = false)
var id: Long = 0L,
@TypeConverters(ListToStringConverter::class)
var eventDescription: List<String> = emptyList(),
@TypeConverters(DateConverter::class)
var date: Date = Date(),
var rate: Int ?= null)
图片说明:
目前我做(根据上图):
mLiveData
从存储库获取LiveData- 打回来
refreshFromDataBase()
mLiveData.addSource
来自LiveData
数据库 - 是什么导致 Android 视图快速更新- 打回来
refreshFromNetwork()
- 休息更新数据库表
- 数据库插入导致 LiveData 添加将更改推送到视图
问题的形成
5 步的最佳实践是什么 - 当新数据出现而我必须用最新数据替换旧数据时?
目前我正在使用 RxJava、Room、Kotlin,并且我在第 3 步中使用了嵌套的 Rx.Single,这是非常难看的意大利面条代码。
喜欢
disposable = usecase.getDataFromNetwork()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onSuccess = {
val itemsList = it
dataBase.deleteAllItems()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy (onComplete = { dataBase.insertNewItems(itemsList)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onComplete = {
// Process complete
}, onError = {
...
})
}
}, onError = {
...
})
}, onError = {
...
})
丑陋的意大利面条代码。
问题
- 我应该在插入新项目之前擦除所有表格吗?Livedata 监听 List 的变化,所以每当有任何变化(一些项目更新,一些插入,一些删除)视图都会更新
- 在我所有的 Streams 都是 Single 的情况下(原因:它们在 onComplete 时自行处理),如何按顺序链接它们以限制一个流规则?