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

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

我将 Room 用作项目的本地数据库。我创建了一个 MovieDao 接口(interface):

@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: Attempt to read from field 'java.lang.String com.example.myapp.Movies$Movie.title' on a null object reference

最佳答案

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

关于android - 如何查询 Room 数据库以使其返回单个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54468203/

相关文章:

android - "return response.body().string() "是空的 okhttp3

android - ActiveAndroid:锁定更新记录?

sqlite - SQLite FTS3 中的中文分词器在哪里?

android - Room + RxJava2 无限循环案例

java - 编辑文本不将背景设为透明

android - 将 Google Play 服务升级到 11.0.0 版本后出错

android - 将应用程序提交到 Android Market 和 Amazon Appstore

android - 如何使用 Sqlite 将一个应用程序的数据库访问到另一个应用程序?

android - 房间数据库中的硬编码 bool 查询

android - 如何在 Room 中映射 NUMERIC SQLite 类型?