【发布时间】:2019-08-13 07:49:43
【问题描述】:
我正在使用以下内容将数据库行提取到我的适配器,但是我想使用“LIKE”和/或“WHERE”以及基本上所有 sql 查询过滤器类型从多重过滤的单个查询中返回行,我可以这样做通过MutableLiveData<String>() 过滤一个;
最终结果会是……
@Query("SELECT * FROM mytable WHERE suburb LIKE '%' || :suburb || '%' postcode LIKE '%' || :postcode || '%' BETWEEN firstDate AND lastDate")
fun getFilteredRows(
suburb: String?,
postcode: String?,
firstDate: String?,
lastDate: String?): LiveData<List<MyTable>>
如下,目前方式只能通过一个过滤器变量。
ViewModel 类
class MyViewModel internal constructor(repository: MyRepository) : ViewModel()
//filter by suburb
var suburb = MutableLiveData<String>().apply {
//do I set as HashMap??
value = SUBURB
}
//LiveData Observer access
val filteredRows: LiveData<List<MyTable>> = suburb.switchMap {
//pass multiple filters to repository here
//but currently only can pass one string to repository
repository.getFilteredRows(it)
}
//MyViewModel function to set the suburb value
fun setSuburb(_suburb: String) {
suburb.value = _suburb
}
//companion object
companion object {
var SUBURB: String? = null
}
存储库类
class Repository private constructor(private val dao: Dao)
//basic repo to dao communtication
fun getFilteredRows(suburb: String?) = dao.getFilteredRows(suburb)
道接口
@Dao
interface Dao
//here I want to receive multiple Strings to do filtering within the query
@Query("SELECT * FROM mytable WHERE suburb LIKE '%' || :suburb || '%'")
fun getFilteredRows(suburb: String?): LiveData<List<MyTable>>
我尝试过传递基本 var 字符串但没有运气,似乎只有 MutableLiveData 是通过 ViewModel 和 Repository 将变量传递给 Dao 的方式
【问题讨论】:
-
可能会设置一个 MutableLiveData
- >() 并在 switchMap 中执行 foreach{}
-
和/或可能设置一个 MutableLiveData
>() 并在 switchMap{} 中执行 foreach 以映射 HashMap 中的每个键
标签: android-room dao android-livedata mutablelivedata