0

在此处输入图像描述

所以,我正在使用 Room 数据库来存储课程,并且我坚持使用返回具有我想要的名称(课程)的课程的方法,因为它总是返回 null。我已经减少了我的数据库,只有 2 门课程,课程变量为:

如上图所示,当我尝试使用 获取存储库中的 CourseEnt 时course = fun,我可以在下面看到它存在,它返回一个带有空值的 LiveData,而不是我想要的 CourseEnt。

关于我做错了什么或我应该使用调试器查看什么的任何想法?

这是代码:

实体:

@Entity(tableName = "courses_table")
data class CoursesEnt (@PrimaryKey val course: String, 
                                   val location: String, 
                                   val description: String,                           
                                   val difficulty: Double, 
                                   val distance: Double, 
                                   val photos: ListInt, 
                                   val category: String, 
                                   val activities: ListString)//ListString is a type converter that converts a String into a List<String> and vice-versa

道:

@Dao
interface CoursesDao {

   @Query("SELECT * from courses_table ORDER BY course ASC")
    fun getAllCourses(): LiveData<List<CoursesEnt>>

   @Query("SELECT * FROM courses_table WHERE course LIKE :str")
    fun getCourse(str: String):LiveData<CoursesEnt>

   ...
}

存储库:

class CoursesRepository(private val coursesDao: CoursesDao){

    val allCourses: LiveData<List<CoursesEnt>> = coursesDao.getAllCourses()
    var singleCourse: LiveData<CoursesEnt> = coursesDao.getCourse("")

    @WorkerThread
    fun getCourse(str: String) {

        singleCourse = coursesDao.getCourse(str)
    }

    ...
}
4

1 回答 1

0

阅读文档,liveData 将始终返回 null 进行直接调用,您必须观察 LiveData,Room 的结果值将在块中。这是一些使用示例

mViewModel.getAllUsers().observe( this@YourActivity, Observer {
        // it - is all users from DB
    })

但如果你打电话

val users = mViewModel.getAllUsers()

结果将为空

于 2019-08-06T05:05:03.937 回答