Field的模糊吸气剂......房间持久性库

时间:2017-08-13 12:31:33

标签: android android-room

我有以下实体

redirect_to

但是当我尝试使用房间持久性库在android中为这个实体创建表时,我收到以下错误。

public class User { @PrimaryKey private final long id; private String _id; private String userName; private String email; }

包含Error:(18, 20) error: Ambiguous getter for Field(element=_id, name=_id, type=java.lang.String, affinity=TEXT, columnName=_id, parent=null, indexed=false). All of the following match: getId, get_id. You can @Ignore the ones that you don't want to match.字段,以便我可以直接将_id api的响应转换为node.js数据库。

6 个答案:

答案 0 :(得分:8)

你需要为每个私有字段设置setter和getter,否则你应该将它们公开。另一个可能导致此错误的原因是有一个字段的两个getter或setter。

答案 1 :(得分:3)

房间:

就我而言

public String getpBSalesTotal() {
    return pBSalesTotal;
}

public void setpBSalesTotal(String pBSalesTotal) {
    this.pBSalesTotal = pBSalesTotal;
}

是我想要作为数据库表的上一个POJO类。

  

我刚刚将小写的“” p“”更改为大写“” P“”,这解决了我的问题   错误

。像下面一样

public String getPBSalesTotal() {
    return pBSalesTotal;
}

public void setPBSalesTotal(String pBSalesTotal) {
    this.pBSalesTotal = pBSalesTotal;
}

生成这种类型的

  

POJO表单JSON

您可以使用此LINK。它适用于Room。

答案 2 :(得分:2)

  

根据文档,您需要为每个字段声明getter。

我可以看到你没有用@Entity注释声明你的类。 另外,请确保您使用的是最新版本的库,因为它仍处于开发阶段,您需要进行一些突破性的更改。

请参阅下面的示例,对于我的以下api版本的Room,它正常。

api 'android.arch.persistence.room:runtime:1.0.0-alpha8'

或者您也可以使用“alpha9”。 希望这能解决你的问题。

@Entity (tableName = "user")
public class User {

@PrimaryKey
private int id;

private String _id;

@ColumnInfo(name = "user_name")
private String userName;

@NonNull
private String passwrod;

public User(String userName, @NonNull String passwrod) {
    this.userName = userName;
    this.passwrod = passwrod;
}

@Ignore
public User() {
}

public int getId() {
    return id;
}

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

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getPasswrod() {
    return passwrod;
}

public void setPasswrod(String passwrod) {
    this.passwrod = passwrod;
}

public String get_id() {
    return _id;
}

public void set_id(String _id) {
    this._id = _id;
}

}

答案 3 :(得分:1)

getter的返回类型应该与属性数据类型相同,如果你有数据类型int的属性,当我发现它解决了我的问题。

祝你好运。

答案 4 :(得分:1)

我也面临同样的问题。当我删除

  

“ _”下划线符号,来自“ _id”

然后工作正常。

public class User {
    @PrimaryKey
    private final long id;

    private String myid;
    private String userName;
    private String email;
}

它对我有用,我希望对其他人也有用。谢谢。

答案 5 :(得分:0)

如果再次发生这种情况,我强烈建议您在Android Studio的帮助下自动生成getter和/或setter。

这样,您就不会再花时间在这个问题上了。

要了解操作方法,请检查此SO-answer