错误:在Android Room中找不到字段的getter

时间:2018-07-14 23:18:44

标签: java android

这是android studio中的一个简单的类:

package com.loghty.bahaa.loghty;

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;


@Entity (tableName = "Chars")
public class Chars {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "char_Id")
    private int pCId;

    @NonNull
    @ColumnInfo(name = "char_field")
    private String mcharField;

    // Getters and setters

    public String getMcharField() {
        return mcharField;
    }

    public void setMcharField(@NonNull String mcharField) {
        this.mcharField = mcharField;
    }

    public int getpCId() {
        return pCId;
    }
}

但是当我构建应用程序时,我在pCId字段中收到此错误:

  

错误:找不到字段的吸气剂

我检查了很多次代码,但是没有什么奇怪的。错误到底在哪里?

4 个答案:

答案 0 :(得分:0)

为我工作:

  1. 添加带有和不带有自动生成的ID
  2. 的构造函数
  3. 在没有自动生成的ID
  4. 的情况下,将@Ignore批注添加到构造函数中
  5. 使用camelCase添加吸气剂
  6. 在设备上首次安装之前清除所有数据,因为我不想执行migration

    @Entity(tableName = "words")
    public class Word {
    
    @PrimaryKey(autoGenerate = true)
    private int id;
    
    @NonNull
    @ColumnInfo(name = "word")
    private String mWord;
    
    public Word(int id, @NonNull String mWord) {
        this.id = id;
        this.mWord = mWord;
    }
    
    @Ignore
    public Word(@NonNull String mWord) {
        this.mWord = mWord;
    }
    
    public int getId() { return id; }
    
    public String getWord(){ return this.mWord; }
    }
    

答案 1 :(得分:0)

如果您使用的是Room,并且变量是布尔值,请记住,getter名为isVariableName()而不是getVariableName()。

我强烈建议-如果错误再次出现-请使用Android Studio自动生成您的getter和setter。这样,您就不会再遇到这个问题。

要这样做:

  1. 创建变量
  2. 右键单击变量
  3. 按“ Alt +插入”或按“生成”。
  4. 选择您要自动生成的内容:

screenshot of how to autogenerate getter and/or setter

答案 2 :(得分:0)

将变量从专用更改为受保护或公用

来自private int pCId;

protected int pCId;

答案 3 :(得分:0)

当getter fun返回类型不同于字段的类型(DateTimeString)时,我遇到了相同的问题:

val timestamp: String = DateTime.now().toString()

fun getTimestamp(): DateTime = DateTime.parse(timestamp)

Room为getTimestamp()字段跳过了timestamp一代的乐趣,因为Room认为它已经创建了。哪里,类型不匹配导致异常,因为类型不匹配。

解决方案是重命名吸气者

val timestamp: String = DateTime.now().toString()

fun getTime(): DateTime = DateTime.parse(timestamp)