簡體   English   中英

如果項目存在於數據庫中,為什么 Room 查詢會返回 null?

[英]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

數據庫圖像。 顯然電影 id 419704 存在(第二項): 在此處輸入圖像描述

getMovie()是您的 DAO 方法。 它返回一個LiveData 這將導致 Room 在后台線程上執行數據庫 I/O。

但是,您立即嘗試從LiveData中獲取值。 這在大多數情況下是行不通的,因為后台線程還沒有完成它的工作。

任何一個:

  • 擺脫LiveData並讓getMovie()直接返回結果,並在后台線程上調用getMovie() ,或者

  • observe() LiveData ,而不是立即嘗試使用它的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM