如何查询Room数据库,使其返回单个对象?

时间:2019-01-31 19:47:26

标签: android android-sqlite android-room android-livedata

我将Room用作项目的本地数据库。我创建了一个MovieDao界面:

@Dao
public interface MovieDao {
    @Query("SELECT * FROM movies ORDER BY title ASC")
    LiveData<List<Movies.Movie>> getMovies();

    @Query("SELECT * FROM movies WHERE id = :id")
    LiveData<Movies.Movie> getMovie(int id);
}

每次我尝试调用getMovies()方法时,它都会正确返回Movie对象的列表,但是如果我调用getMovie(int id)并传递肯定存在于数据库中的ID,我总是会得到NPE。

与返回单个Movie对象相比,我可以创建查询吗?

谢谢!

编辑:

LiveData<Movies.Movie> liveData = movieRepository.retrieveFavoriteMovieTask(550);
liveData.observe(this, m -> {
    Log.d(TAG, m.title);
});

错误:

  

java.lang.NullPointerException:尝试从空对象引用上的字段'java.lang.String com.example.myapp.Movies $ Movie.title'中读取

1 个答案:

答案 0 :(得分:-1)

id可能由房间保留。您可以使用@PrimaryKey(autoGenerate = true)设置自动递增的PK,然后定义自己的ID(movie_id),您可以设置该ID并随意获取,同时保持PK完整性不变。