繁体   English   中英

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

[英]error: Cannot find getter for field in Android Room

这是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 字段中收到此错误:

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

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

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

来自private int pCId;

protected int pCId;

这对我有用:

  1. 添加带有和不带有自动生成 id的构造函数
  2. 将 @Ignore 注释添加到没有自动生成的 id的构造函数
  3. 添加带有驼峰命名法的吸气剂
  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; } }

如果你使用的是 Room 并且变量是一个布尔值,那么记住 getter 被命名为 isVariableName() 而不是 getVariableName()。

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

这样做:

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

如何自动生成 getter 和/或 setter 的屏幕截图

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

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

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

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

解决方案是重命名 getter fun

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM