gpt4 book ai didi

android - Room Dao LiveData 作为返回类型导致编译时错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:59:12 26 4
gpt4 key购买 nike

我正在使用 Room 并实现了返回 LiveDataDao。它在添加以下依赖项后工作正常。

implementation "androidx.room:room-runtime:2.1.0-alpha04"
kapt "androidx.room:room-compiler:2.1.0-alpha04"

但是当我如下所述添加新的 Room 协程依赖项时。

implementation "androidx.room:room-runtime:2.1.0-alpha04"
implementation "androidx.room:room-coroutines:2.1.0-alpha04"
kapt "androidx.room:room-compiler:2.1.0-alpha04"

下面是编译的代码

@Dao
interface AccountDao{

@Query("SELECT * FROM account_master")
suspend fun getAllAccounts(): List<Account>
}

下面是给出错误的代码。

@Dao
interface AccountDao{

@Query("SELECT * FROM account_master")
suspend fun getAllAccounts(): LiveData<List<Account>>
}

开始接收错误。

PlayGround/app/build/tmp/kapt3/stubs/debug/com/playground/www/x/datasource/dao/AccountDao.java:11: error: Not sure how to convert a Cursor to this method's return type (androidx.lifecycle.LiveData<java.util.List<com.playground.www.x.datasource.entity.Account>>).
public abstract java.lang.Object getAllAccounts(@org.jetbrains.annotations.NotNull()

有人面临类似的问题吗?

最佳答案

我认为这里的解决方案实际上是在不使用协程的情况下返回 LiveData。 LiveData 开箱即用,返回 LiveData 时没有理由使用协程。

当使用 LiveData 时,它已经在后台线程上处理它。如果不使用 LiveData,那么在这种情况下,您可以使用协程(也许最终是协程 channel )或 RxJava2。

有关示例,请参阅此代码实验室:https://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin .在这里,他们需要一个用于插入的后台线程,而不是用于返回的 LiveData。

注意:DAO 未返回 LiveData 的实际代码实验室中似乎存在错误。我已在下面的示例中更正了这一点。

@Dao
interface WordDao {

@Query("SELECT * from word_table ORDER BY word ASC")
fun getAllWords(): LiveData<List<Word>>

@Insert
suspend fun insert(word: Word)

@Query("DELETE FROM word_table")
fun deleteAll()
}

class WordRepository(private val wordDao: WordDao) {

val allWords: LiveData<List<Word>> = wordDao.getAllWords()

@WorkerThread
suspend fun insert(word: Word) {
wordDao.insert(word)
}
}

关于android - Room Dao LiveData 作为返回类型导致编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com