【问题标题】:error : Entities and Pojos must have a usable public constructor and Cannot find setter for field错误:实体和 Pojos 必须有一个可用的公共构造函数并且找不到字段的设置器
【发布时间】:2018-03-17 13:41:54
【问题描述】:

我是 android 架构组件的新手。我正在尝试使用相同的 Gradle 配置参考 android-architecture-components/BasicRxJavaSample 构建应用程序。但我收到以下错误..

  • 错误:(14, 8) 错误:实体和 Pojo 必须具有可用的公共构造函数。您可以有一个空构造函数或参数与字段匹配的构造函数(按名称和类型)。尝试了以下构造函数,但它们未能匹配:= Department(java.lang.String,java.lang.String) : [id :空,dep:空]
  • 错误:(16, 20) 错误:找不到字段的设置器。
  • 错误:(18, 20)错误:找不到字段的设置器。

我为所有架构组件使用版本“1.0.0-alpha9”。我也尝试过当前的“1.0.0-beta1”版本。

我看过 [Field 的模糊吸气剂...房间持久性库 2 链接也可以,但根据谷歌示例不需要为每个字段设置设置。

模型类

    @Entity(tableName = "tblDepartment")
public class Department{
    @PrimaryKey
    private String mId;

    private String mName;

    @Ignore
    public Department(String dep) {
        mId= UUID.randomUUID().toString();
        mName= dep;
    }
    public Department(String id, String dep) {
        mId = id;
        mName=dep;
    }

    public String getDepartmentId() {
        return mId;
    }

    public String getDepartmentName() {
        return mName;
    }
}

【问题讨论】:

  • 您的问题在于 Expense 类。您的问题显示了 Department 类。要么你有错误的错误信息,要么是错误的代码。
  • 我错误地添加了错误的错误日志。

标签: android android-room android-architecture-components


【解决方案1】:

你也可以试试这个:-

@Ignore
public Department(int mId, String mName) {
   this.mId= mId;
   this.mName= mName;
}

public Department(String mName) {
   this.mName= mName;
}

【讨论】:

    【解决方案2】:

    您的问题是您的 getter/setter 与您的字段名称不匹配,因此目前您有:

    private String mId;

    public String getId() {}

    Room 预处理器正在查看您的类,但未能为您的 mId 字段找到 getter/setter,因为它期待 public String getMId() 与您的构造函数相同,参数名称与字段名称不匹配,因此它不能找到一个有效的构造函数。

    【讨论】:

      【解决方案3】:

      你需要一个有效的构造函数。

      以及您通过 Room 存储的所有字段的 getter/setter。

      试试:

      @Entity(tableName = "tblDepartment")
      public class Department{
      @PrimaryKey
      private String mId;
      
      private String mName;
      
      @Ignore
      public Department(String mName) {
          mId= UUID.randomUUID().toString();
          this.mName= mName;
      }
      public Department(String id, String name) {
          this.mId = mId;
          this.mName=mName;
      }
      
      public String getId() {
          return mId;
      }
      
      public String getName() {
          return mName;
      }
      public void setId(String mId){ this.mId = mId; }
      public void setName(String mName){ this.mName = mName; }
      } 
      

      【讨论】:

      • check this google sample 。这里没有使用公共构造函数。
      • 问题是你没有使用列名,并且你的 POJO 在 getter 中没有与你的变量相同的名称
      • 感谢@Marcos 的帮助,我试过了,但它不起作用
      • 嗨@Marcos 我的代码上传here on git 如果你检查一下,它将非常有帮助。
      猜你喜欢
      • 1970-01-01
      • 2019-11-03
      • 2017-11-20
      • 2019-05-21
      • 1970-01-01
      • 2019-09-14
      • 2017-11-13
      • 2018-10-19
      • 1970-01-01
      相关资源
      最近更新 更多