Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用协程api获取实体_Android_Kotlin_Android Livedata_Kotlin Coroutines - Fatal编程技术网

Android 使用协程api获取实体

Android 使用协程api获取实体,android,kotlin,android-livedata,kotlin-coroutines,Android,Kotlin,Android Livedata,Kotlin Coroutines,使用coroutines和LiveData从数据库中使用Room选择一些数据的最佳方法是什么 这是我暂停选择的刀类 @Dao interface UserDao { @Query("SELECT * from user_table WHERE id =:id") suspend fun getUser(id: Long): User } 视图模型类I的内部使用viewModelScope加载用户 获取用户实体的方法正确吗? fun load(userId: Long, blo

使用
coroutines
和LiveData从数据库中使用
Room
选择一些数据的最佳方法是什么

这是我暂停选择的刀类

@Dao
interface UserDao {

    @Query("SELECT * from user_table WHERE id =:id")
    suspend fun getUser(id: Long): User
}
视图模型类I的内部使用
viewModelScope
加载用户

获取用户实体的方法正确吗?

fun load(userId: Long, block: (User?) -> Unit) = viewModelScope.launch {
    block(database.load(userId))
}
根据提到的

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}
val用户:LiveData=LiveData{
val data=database.loadUser()//loadUser是一个挂起函数。
发射(数据)
}

这段代码不起作用

您的房间必须返回LiveData

改用:

@Dao
interface UserDao {

    @Query("SELECT * from user_table WHERE id =:id")
    fun getUser(id: Long): LiveData<User>
}
@Dao
接口用户DAO{
@查询(“从用户_表中选择*,其中id=:id”)
fun getUser(id:Long):LiveData
}

请说明它是如何工作的。您发布的函数是否为您的
数据库.loadUser()版本?您的不是挂起函数,也不返回用户(它返回协同例程作业)。当我为单个项设置返回类型LiveData时,room无法编译项目。没有足够的信息来调试它。我不知道你说的是哪个函数,你是如何使用它的。您问题中的代码与函数名或返回类型不匹配。我已更新了我的问题。请再次检查@Tenfour04I仍然看不到您如何调用此
load
函数。如果它返回
LiveData
,则它不应该是
suspend
您正在编写的。当我删除suspend关键字代码时,successRoom支持suspend函数。另外,
LiveData
不是必需的返回类型。您可以选择使用LiveData或协同程序。但是,对于不同的提议,livedata将观察Room上的更改,协同程序将从DB获取数据,而不会阻塞UI线程。我理解这些差异。我想指出的是,OP希望使用不要求返回类型为LiveData的挂起函数。我相信还有其他事情在进行,将返回类型更改为LiveData可能不是解决方案。