首页 > 解决方案 > 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();
}

标签: javaandroidandroid-room

解决方案


您的setId方法没有引用该字段id。您的参数会影响您的字段。我认为你应该this.id改用。


推荐阅读