我收到此错误,但找不到任何解决方案。我尝试了很多事情,但仍然得到了这段代码。
我的代码是: https://justpaste.it/4di3y
错误:
错误:找不到字段的getter。 (私人Long fie_id)
我该如何解决? 谢谢。
答案 0 :(得分:4)
代替
public Long getId() {
return fie_id;
}
public void setId(Long id) {
this.fie_id = id;
}
做
public Long getFie_id() {
return fie_id;
}
public void setFie_id(Long fie_id) {
this.fie_id = fie_id;
}
答案 1 :(得分:2)
即使生成getter setter之后,我也面临着奇怪的问题。但是我通过this solution
解决了答案 2 :(得分:2)
也许您不相信我,但我不得不说。我正在使用Mac,该问题与计算机语言有关。我当时使用的是土耳其语,后来我改成了英语,但是在无效缓存和重新启动之后,这个问题就消失了。
摘要:
答案 3 :(得分:1)
这与您的PrimaryKey
的命名有关。 getter和setter的签名应与变量名称相对应。否则,Room
找不到它。
这意味着变量id
应该具有getId()
,变量fie_id
应该具有getFie_id()
作为获取器,设置方法也是如此。因此,请重命名您的PrimaryKey
或相应地命名您的获取器和设置器。
答案 4 :(得分:1)
对我来说是因为没有大写的“ m”。下面的作品:
@ColumnInfo(name = "foo")
private String mFoo;
public String getMFoo() {
return mFoo;
}
public void setMFoo(String foo) {
this.mFoo = foo;
}
这不是:
@ColumnInfo(name = "foo")
private String mFoo;
public String getmFoo() {
return mFoo;
}
public void setmFoo(String foo) {
this.mFoo = foo;
}
也不要忘记在迁移中指定新列。像这样:
val MIGRATION_2_3: Migration = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE myDataObj "
+ " ADD COLUMN foo TEXT")
}
}
答案 5 :(得分:1)
将所有访问修饰符更改为“ public”。这样可以解决问题。
代替:
@PrimaryKey
private Long fie_id;
@ColumnInfo(name = "name")
private String name;
使用:
@PrimaryKey
public Long fie_id;
@ColumnInfo(name = "name")
public String name;
答案 6 :(得分:0)
在程序生命周期中,如果封装不正确,则会引起混乱。查看您的代码后,似乎正在尝试访问一个永恒类。正在调用PrimaryKey id而不是传递的值setId(id)。
答案 7 :(得分:0)
最好坚持使用文件。结构很敏感。 link of documantation 样本:
@Entity(tableName = "notes")
public class Note {
@PrimaryKey(autoGenerate = true)
public int id;
@NotNull
@ColumnInfo(name = "note")
public String mNote;
public Note(@NotNull String mNote) {
this.mNote = mNote;
}
public int getId() {
return id;
}
@NotNull
public String getNote() {
return this.mNote;
}}
在更改之后,项目选项Clear
和Rebuild
遇到了相同的问题。
答案 8 :(得分:0)
对于setter中的getter,就像示例中一样,遵循字段的Pattern get / set [A-Z] last lenght-1(字段:mWord)
@Entity(tableName = "words")
公共类单词{
@PrimaryKey
@NonNull
@ColumnInfo(name = "word")
private String mWord;
public Word(@NonNull String mWord) {
this.mWord = mWord;
}
public String getMWord() {
return mWord;
}
}
答案 9 :(得分:0)
仅需要更改的是,将域合并范围更新为“公共”而不是“私有”。
答案 10 :(得分:0)
尝试将setter函数的名称与声明的变量名匹配。
外汇交易。
有一个声明为
的布尔变量
私有布尔附件状态; </ strong>
吸气剂应该是这样的
公共布尔值getattachment_status(){
返回attachment_status
}
或者您可以这样做
公共布尔型getAttachment_status(){
返回attachment_status
}
我这样声明我的吸气剂,但遇到了相同的错误
公共布尔型getAttachment(){
返回attachment_status
}
但是我重构了,问题解决了。
答案 11 :(得分:0)
将变量从私有更改为受保护对我来说很有效。
答案 12 :(得分:0)
如果一切正确,那么我在大多数情况下都会观察到此问题,例如pId,uId等。
从
更改变量名称私人长 pId ;
到
私人长 pid ;
并使用IDE生成getter和setter。
答案 13 :(得分:0)
科特林室不允许在'i'字符的实体类开头定义变量。我有同样的错误。我解决了,尽管很困难。 将id替换为pId,就可以了。 例如;
val isrc: String? = "",
代替
val albumIsrc: String? = "",
如果以此方式更改变量,则错误将得到解决。 祝你幸福。