Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 Kotlin获取回调_Android_Database_Kotlin - Fatal编程技术网

如何从房间数据库android Kotlin获取回调

如何从房间数据库android Kotlin获取回调,android,database,kotlin,Android,Database,Kotlin,我只想从房间数据库中获取行计数作为Int值, 不是来自初始化的LiveData,例如LiveData.value?.size Dao类 @Dao interface MyDao { @Query("SELECT COUNT(*) FROM User") fun getUserCount(): Int } class MyRepository(private val myDao: MyDao) { fun getUserCount() = myDao.get

我只想从房间数据库中获取行计数作为Int值, 不是来自初始化的
LiveData
,例如
LiveData.value?.size

Dao类

 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = myRepository.getUserCount()
}
 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    suspend fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    suspend fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = viewModelScope.launch {
            myRepository.getUserCount()
    }
}
存储库类

 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = myRepository.getUserCount()
}
 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    suspend fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    suspend fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = viewModelScope.launch {
            myRepository.getUserCount()
    }
}
视图模型类

 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = myRepository.getUserCount()
}
 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    suspend fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    suspend fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = viewModelScope.launch {
            myRepository.getUserCount()
    }
}
这就是我想要的。但正如您所知,我们需要在后台线程而不是主线程访问房间数据库

所以我把代码改成

Dao类

 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = myRepository.getUserCount()
}
 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    suspend fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    suspend fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = viewModelScope.launch {
            myRepository.getUserCount()
    }
}
存储库类

 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = myRepository.getUserCount()
}
 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    suspend fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    suspend fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = viewModelScope.launch {
            myRepository.getUserCount()
    }
}
视图模型类

 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = myRepository.getUserCount()
}
 @Dao 
interface MyDao {
    @Query("SELECT COUNT(*) FROM User")
    suspend fun getUserCount(): Int
 }
class MyRepository(private val myDao: MyDao) {    
    suspend fun getUserCount() = myDao.getUserCount()
}
class MyViewModel(application: Application) : AndroidViewModel(application) {
    fun getUserCount() = viewModelScope.launch {
            myRepository.getUserCount()
    }
}
如果行计数为1,如何获取“1”作为回调?

使用计数

@Query("SELECT COUNT(column_name or primary key column name) from table_name ")
fun getCount(): Long

从存储库调用
getCount()

我不确定。但您可以将myRepository.getUserCount()的结果放入变量中,然后在当前启动中使用它来调用某些函数。Locat说“无法访问主线程上的数据库,因为它可能会长时间锁定UI。”在
getCount
块中添加
suspend
关键字,然后从
launch
块调用