首页 > 解决方案 > 如何从 Repository 将参数传递给 Dao 上的查询?

问题描述

道码:

    @Query("SELECT * FROM word_table WHERE transaction_date BETWEEN :from_date AND :to_date")
    fun findTransactionsBetweenDates(from_date: Long, to_date: Long): LiveData<List<Word>>

存储库代码:

    public var  from_date: Long = 0
    public var to_date: Long = 0

    val allWordsByDates: LiveData<List<Word>> = wordDao.findTransactionsBetweenDates(from_date, to_date)

   @Suppress("RedundantSuspendModifier")
   @WorkerThread
    suspend fun WordsByDates(from_date:Long, to_date:Long): LiveData<List<Word>>  {
        return  wordDao.findTransactionsBetweenDates(from_date, to_date)
    }

我想从 MyMainActivity 观察 allWordsByDates,从那里我通过 viewModel 调用 WordsByDates 函数,从日期和到日期,但它们在存储库中永远不会改变,它们总是 0。我试图从 WordsByDates 函数内部更改 from_date 和 to_date但这不起作用,我最后一次尝试是将 WordsByDates 函数的返回值分配给 allWordsByDates 但这也不起作用。任何有关代码的帮助将不胜感激。

标签: androidkotlin

解决方案


似乎列表不是静态的,并且会根据选择进行更改,所以我会像这样更改存储库:

    private val allWordsByDatesMLD = MutableLiveData<List<Word>>()
    val allWordsByDates: LiveData<List<Word>> = allWordsByDatesMLD

    @WorkerThread
    suspend fun WordsByDates(from_date: Long, to_date: Long) {
        allWordsByDatesMLD.postValue(wordDao.findTransactionsBetweenDates(from_date, to_date))
    }

像这样和道一起工作

    @Query("SELECT * FROM word_table WHERE transaction_date BETWEEN :from_date AND :to_date")
   suspend fun findTransactionsBetweenDates(from_date: Long, to_date: Long): List<Word>

推荐阅读