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

Bah*_*din 5 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我多次检查代码,但没有什么奇怪的。错误究竟在哪里?

小智 5

将变量从私有更改为受保护或公共

private int pCId;

protected int pCId;


mad*_*att 2

这对我来说工作:

  1. 添加带有和不带有自动生成的 id 的构造函数
  2. 将 @Ignore 注解添加到构造函数中,而不使用自动生成的 id
  3. 使用驼峰命名法添加 getter
  4. 在设备上首次安装之前清理所有数据,因为我不想进行迁移

    @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; }
    }
    
    Run Code Online (Sandbox Code Playgroud)