android Room DAO一直返回NULL

fcwjkofz  于 2023-01-24  发布在  Android
关注(0)|答案(2)|浏览(231)

room中,我有一个这样的dao:

@Dao
interface FacultyDao {
    @Query("select * from faculty")
    fun getAll(): LiveData<List<Faculty>>
  
    ...
}

在存储库中,我只需要调用这个方法并记录它:

class FacultyRepository(application: Application) {

    private val facultyDao: FacultyDao

    init {
        val db: AppDB = AppDB.getInstance(application)
        facultyDao = db.facultyDao()
    }

    fun getAllFaculty(): LiveData<List<Faculty>> {
        val v = facultyDao.getAll()
        Log.d("muaxx", v.value.toString())
        return v
    }
     ...

}

但问题是,它返回的是null,* 但当我在inspector中运行该查询时,它成功了。* 我错过了什么吗?

8ulbf1ek

8ulbf1ek1#

LiveData不会立即有一个初始值。Room查询数据库并在后台线程上获得结果。然后在主线程的 next 循环中,LiveData的value将被设置为这个检索到的值。您过早地记录了value。初始值将在将来的某个时间出现,在这个函数已经返回之后。
通常,您只能通过观察LiveData值来获取它。
直接检查value通常只有在您管理MutableLiveData并使用上一个值来帮助确定要发布的下一个值时才应该执行。

iqih9akk

iqih9akk2#

直播数据给我们实时的数据,所以第一次你自己还没有一些,而且它在等待数据库的响应,如果你想看到一些直播的数据,你必须观察,这样接收到信息之后,观察者就会被调用,信息就会被记录下来。

相关问题