gpt4 book ai didi

android - 如何在 Room Db 上使用挂起功能?

转载 作者:行者123 更新时间:2023-12-02 12:16:00 27 4
gpt4 key购买 nike

我在 kotlin 中使用协程使用 Room Db。这是我的道界面:

@Dao
interface CheckListNameDao {

@Insert
suspend fun insertName(name: CheckListName)


@Query("SELECT * FROM CheckListNamesTable")
fun getAllNames(): LiveData<List<CheckListName>>
}
getAllNames()方法工作正常。问题在于 insertName()方法。当我删除 suspend来自 insertName() 的关键字方法,它会抛出这个异常: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.但是,当我使用 suspend关键字,我不能再构建项目了。它显示以下错误:
error: Methods annotated with @Insert can return either void, long, Long, long[], Long[] or List<Long>.
public abstract java.lang.Object insertName(@org.jetbrains.annotations.NotNull()

为什么显示此错误?我的代码是基于这个 Android Room with a View - Kotlin

编辑:
这是我的存储库:
class MainRepository(application: Application) {

private var nameDao: CheckListNameDao = AppDatabase.getDatabase(application.applicationContext)
.checkListNameDao()

fun getAllNames(): LiveData<List<CheckListName>> {
return nameDao.getAllNames()
}

suspend fun setNewListName(checkListName: CheckListName) {
nameDao.insertName(checkListName)
}
}

这是 View 模型:
class MainViewModel(application: Application) : AndroidViewModel(application) {

private var mainRepository = MainRepository(application)

fun getAllNames(): LiveData<List<CheckListName>> {
return mainRepository.getAllNames()
}

fun setNewListName(name: String) {
viewModelScope.launch {
mainRepository.setNewListName(CheckListName(0, name))
}
}
}

编辑 2:

添加 suspend 时也出现此错误关键词:
error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
kotlin.coroutines.Continuation<? super kotlin.Unit> p1);

这是 CheckListName数据类:
@Entity(tableName = "CheckListNamesTable")
data class CheckListName(

@PrimaryKey(autoGenerate = true)
var id: Int,

var name: String
)

最佳答案

根据 Room Declaring Dependencies documentation , 你需要依赖 room-ktx使用协程,并使用它,suspend方法:

implementation "androidx.room:room-ktx:2.2.3"

关于android - 如何在 Room Db 上使用挂起功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60050991/

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