[英]Why is Room query returning null if the item exists in the database?
我已將電影插入到我的數據庫中,並希望根據 movieId 查詢數據庫。 我可以使用 Stetho 檢查器確認 movieId 在我的數據庫中。 為什么我得到 null?
道
@Dao
public interface MoviesDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insertMovie(Movie movie);
@Transaction
@Query("SELECT * FROM movie WHERE id = :movieId ")
LiveData<Movie> getMovie(long movieId);
視圖模型
public void getMovieFromDatabase(Movie movie) {
LiveData<Movie> result = movieRepository.getMovieFromDatabase(movie);
Log.d(TAG, "result is: " + result.getValue());
}
存儲庫
public LiveData<Movie> getMovieFromDatabase(Movie movie) {
Log.d(TAG, "Movie id: " + movie.getId());
return dbInstance.moviesDao().getMovie(movie.getId());
}
來自 Logcat 的結果
Movie id: 419704
result is: null
getMovie()
是您的 DAO 方法。 它返回一個LiveData
。 這將導致 Room 在后台線程上執行數據庫 I/O。
但是,您立即嘗試從LiveData
中獲取值。 這在大多數情況下是行不通的,因為后台線程還沒有完成它的工作。
任何一個:
擺脫LiveData
並讓getMovie()
直接返回結果,並在后台線程上調用getMovie()
,或者
observe()
LiveData
,而不是立即嘗試使用它的值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.