在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中运行该查询时,它成功了。* 我错过了什么吗?
2条答案
按热度按时间8ulbf1ek1#
LiveData不会立即有一个初始值。Room查询数据库并在后台线程上获得结果。然后在主线程的 next 循环中,LiveData的
value
将被设置为这个检索到的值。您过早地记录了value
。初始值将在将来的某个时间出现,在这个函数已经返回之后。通常,您只能通过观察LiveData值来获取它。
直接检查
value
通常只有在您管理MutableLiveData并使用上一个值来帮助确定要发布的下一个值时才应该执行。iqih9akk2#
直播数据给我们实时的数据,所以第一次你自己还没有一些,而且它在等待数据库的响应,如果你想看到一些直播的数据,你必须观察,这样接收到信息之后,观察者就会被调用,信息就会被记录下来。