[英]Room DAO keeps returning NULL
在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
,但是當我在檢查器中運行該查詢時它起作用了。 我錯過了什么嗎?
LiveData 不會立即具有初始值。 Room 查詢數據庫並在后台線程上獲取結果。 然后在主線程的下一個循環中,LiveData 的value
將設置為此檢索到的值。 您過早記錄value
。 初始值將在未來某個時間出現,在這個 function 已經返回之后。
通常你應該只通過觀察它來獲得一個 LiveData 值。
直接檢查value
通常只應在您管理 MutableLiveData 並使用先前的值來幫助確定您要發布的下一個值時進行。
實時數據為我們提供了實時數據。 所以,第一次,你自己還是沒有一些。 它正在等待數據庫的響應。 如果你想看到一些實時數據,你必須觀察它,以便在收到信息后,觀察者會被調用並記錄信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.