java - Android房间持久性查询返回空值
问题描述
我目前正在学习如何使用 Android Room Persistence 库。以下代码在尝试查询 (findById) 以获取与 int (ID) 绑定的已保存布尔值时遇到问题。尝试这样做时,它反复出现空值。这里有没有我忽略的问题?有人可以指出我在这里做错了什么吗?谢谢你。
收藏电影道
@Dao
public interface FavoriteMovieDao {
@Query("SELECT * FROM favoritemovie")
List<FavoriteMovie> getAll();
@Query("SELECT * FROM favoritemovie WHERE id IN (:ids)")
List<FavoriteMovie> loadAllByIds(int[] ids);
@Query("SELECT * FROM favoritemovie WHERE id LIKE :id LIMIT 1")
FavoriteMovie findById(int id);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(FavoriteMovie movie);
@Delete
void delete(FavoriteMovie movie);
}
FavoriteMovie.java (实体)
@PrimaryKey
private int id;
public int getId(){
return id;
}
public void setId(int id){
id = id;
}
@ColumnInfo(name = "favorite")
private boolean favorite;
public boolean getFavorite(){
return favorite;
}
public void setFavorite(boolean favorite){
favorite = favorite;
}
public void FavoriteMovie(int id, boolean favorite) {
this.id = id;
this.favorite = favorite;
}
在执行插入之前尝试查询
db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").allowMainThreadQueries().build();
if (db.favoriteMovieDao().findById(classId) == null) {
FavoriteMovie fm = new FavoriteMovie();
fm.setId(classId);
fm.setFavorite(true);
db.favoriteMovieDao().insert(fm);
}
应用数据库.java
@Database(entities = {FavoriteMovie.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract FavoriteMovieDao favoriteMovieDao();
}
解决方案
您的setId
方法没有引用该字段id
。您的参数会影响您的字段。我认为你应该this.id
改用。
推荐阅读
- javascript - 自定义 AMCharts 图例颜色
- laravel - 属性未定义错误但已定义 Vue js Laravel
- swift - 将对象插入字典时出现“如果没有 _objectID,则必须有 uuid”异常
- mysql - 数据库结构 - 具有 category_id 的单个设计表(多行)或多个设计类别表(几行)
- python - PyQt5 在 pyuic 生成的代码之外添加 eventFilter
- javascript - 在 UPDATE SET 语句中使用命名参数的 pg-promise
- jestjs - Jest 测试通过 CLI 运行,但通过 Visual Studio 2019 测试资源管理器失败
- yesod - Yesod Persistent 使用 Aeson 将 UTCTime 解析为记录
- python - 如何使用 ctypes 从 Python3 访问 C 中的一些常量值
- oracle - 同步 oracle ddl 更改