【问题标题】:how to change LiveData observable query parameter with room database in android?如何在 android 中使用房间数据库更改 LiveData 可观察查询参数?
【发布时间】:2020-02-06 17:02:05
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 在更改busCategory 时,您需要再次调用viewmodel 方法,以使用新的busCategory 获取新数据。
  • @MuhammadAwais 然后它观察两个总线类别,在 onChanged 方法中它还获得先前总线类别的值
  • 第二种方法不需要调用observe方法。因为它已经在你的视野中观察到了。更改数据后,您的 onChanged() 方法将使用新数据调用。
  • 我也有同样的问题。需要更改查询参数。经过几天的测试和搜索,我没有给出明确的答案。希望有人能照亮我们。

标签: android observable android-room android-livedata


【解决方案1】:

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

val mutableBusCategory: MutableLiveData<String> = MutableLiveData()

可变实时数据的设置器

fun searchByCategory(param: String) {
    mutableBusCategory.value = param
}

observable 观察变化

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

最后一步是观察实时数据

 busObservable.observe(this, Observer {
        //your logic for list})

并触发 mutablelivedata

searchByCategory(//categoryName)

【讨论】:

  • 我有超过 1 个参数。我该如何使用这种方法?
【解决方案2】:

我不认为这是一个合理的期望。启动一个新查询并订阅它会更有意义。

【讨论】:

  • 我可以删除观察者并设置新的观察者并调用新的实时数据。但是如何停止当前的实时数据实例?这样房间就不会为当前的 livedata 实例发出数据。
  • 假设您只想要一个回复,您可以在收到回复后退订吗?
猜你喜欢
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
相关资源
最近更新 更多