我遇到了一个关于在 Android 房间使用准备好的数据库的问题

问题描述 投票:0回答:2

我试图在我的 Android 应用程序中实现 Room,但出现错误 error detail 我发现 member_id 的 found 部分是 Integer,而 expected 部分是 INTEGER,但我不知道如何设置它,也不明白这两者之间有什么不同。 这是我数据库中的表 database 这是我的实体

@Entity(tableName = "Hierarchy")
public class Hierarchy {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    @NotNull private int id;
    @ColumnInfo(name = "catagory_id")
    @NotNull private Integer catagory_Id;
    @ColumnInfo(name = "member_id")
    @NotNull private int member_id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @NotNull
    public Integer getCatagory_Id() {
        return catagory_Id;
    }

    public void setCatagory_Id(@NotNull Integer catagory_Id) {
        this.catagory_Id = catagory_Id;
    }

    @NotNull
    public Integer getMember_id() {
        return member_id;
    }

    public void setMember_id(@NotNull Integer member_id) {
        this.member_id = member_id;
    }
}

我以这种形式创建数据库

database = Room.databaseBuilder(this, MyDataBase.class, "MedicineData.db")
                .createFromAsset("Database/dataset.db")
                .build();
    }

非常感谢你帮助我!

我试图在实体中将 int 更改为 Integer 但它不起作用。

java android android-sqlite android-room
2个回答
0
投票

在找到的预打包/资产数据库中,您有category_id,在预期的即

@Entity
带注释的层次结构类中,您有catagory_id

即第四个字符是 a 而不是 e

所以可能改用:-

@Entity(tableName = "Hierarchy")
public class Hierarchy {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    @NotNull private int id;
    @ColumnInfo(name = "category_id") /*<<<<<<<<<< CHANGED 4th character to e*/
    @NotNull private Integer catagory_Id;
    @ColumnInfo(name = "member_id")
    @NotNull private int member_id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @NotNull
    public Integer getCatagory_Id() {
        return catagory_Id;
    }

    public void setCatagory_Id(@NotNull Integer catagory_Id) {
        this.catagory_Id = catagory_Id;
    }

    @NotNull
    public Integer getMember_id() {
        return member_id;
    }

    public void setMember_id(@NotNull Integer member_id) {
        this.member_id = member_id;
    }
}

您可能还希望将类别的所有用途更改为类别。


0
投票

您只需要将变量 member_id 的类型从 int 更改为 Integer,因为您将 getter 和 setter 作为 Integer 传递,并且您在模型声明中将 member_id 提供给 int 值,因此更改代码如下定义,

 @ColumnInfo(name = "member_id")
 @NotNull private Integer member_id;

关于 int 和 Integer 之间的区别的问题是 int 简单地表示一个整数,而 Integer 具有额外的属性和方法并且是包装类作为 java API 中包含的组件,而不像 int 是java.

© www.soinside.com 2019 - 2024. All rights reserved.