Jetpack:Room使用报错FAQ

系列文章目录

相关文章:
Jetpack:Room超详细使用踩坑指南!
Jetpack:Room+kotlin协程? 事务问题分析,withTransaction API 详解.


Room在搭建的时候出现几个小问题,记录一下。基本都是配置问题:

There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: simple_student)。
编译的时候报错,找不到表。
需要在声明 的 Entity里面,将对应得表明设置进去。

//错误写法
@Entity
data class StudentEntity
//正确写法
@Entity(tableName = "student_table")
data class StudentEntity

Not sure how to convert a Cursor to this method’s return type (kotlinx.coroutines.flow.Flow>).

Dao 层 将返回值声明为LiveData得时候,报错。这个排查了半天发现是因为,将对应得函数声明为了挂起函数。
正确使用应去除对应得suspend 修饰 。

//错误使用
@Query("select * from $STUDENT_TABLE_NAME")
suspend fun obtainStudentAll(): LiveData<List<StudentEntity>>
//正确使用
@Query("select * from $STUDENT_TABLE_NAME")
fun obtainStudentAll(): LiveData<List<StudentEntity>>

Not sure how to convert a Cursor to this method’s return type (androidx.lifecycle.LiveData>)

同理,不能转换为flow。去除对应得suspend修饰:

//错误写法
@Query("select * from $STUDENT_TABLE_NAME")
suspend fun obtainStudentAll(): Flow<List<StudentEntity>>
//正确写法
@Query("select * from $STUDENT_TABLE_NAME")
fun obtainStudentAll(): Flow<List<StudentEntity>>

如果不需要将返回类型声明为liveData或者flow得话,还是可以直接声明suspend的。

你可能感兴趣的:(Jetpack,my,sqlite,android,jetpack,room,报错指南)