如何在android中使用房间数据库更改LiveData可观察查询参数?

Bas*_*ush 9 android observable android-room android-livedata

我正在使用房间数据库的实时数据,我的活动观察从房间数据库提供的实时数据。

@Query("SELECT * FROM BUS WHERE BUS_CATEGORY = :busCategory")
LiveData<List<Bus>> getLiveBuses( String busCategory);
Run Code Online (Sandbox Code Playgroud)

ViewModels 通过 Dao(数据访问对象)获取 LiveData,Activity 观察这些实时数据。

现在它工作正常。但是当 busCategory 更改时,我无法修改此实时数据以获取新选择的 busCategory 的总线。

那么如何在查询参数可变的情况下观察相同的 liveData 呢?

小智 16

我建议你使用viewModel。我使用 MutableLiveData 进行了查询并观察了变化。第一步

val mutableBusCategory: MutableLiveData<String> = MutableLiveData()
Run Code Online (Sandbox Code Playgroud)

可变实时数据的设置器

fun searchByCategory(param: String) {
    mutableBusCategory.value = param
}
Run Code Online (Sandbox Code Playgroud)

observable 观察变化

val busObservable: LiveData<Bus> = Transformations.switchMap(mutableBusCategory) { param->
    repository.getLiveBuses(param)
}
Run Code Online (Sandbox Code Playgroud)

观察实时数据的最后一步

 busObservable.observe(this, Observer {
        //your logic for list})
Run Code Online (Sandbox Code Playgroud)

并触发 mutablelivedata

searchByCategory(//categoryName)
Run Code Online (Sandbox Code Playgroud)

  • 我有超过 1 个参数。我该如何使用这种方法? (2认同)