Я получаю эту ошибку, но не могу найти решения. Я много чего пробовал, но все равно получаю этот код.
Мой код:https://justpaste.it/4di3y
Ошибка:
error: Cannot find getter for field. ( private Long fie_id )
Как я могу это исправить?
Я проголосовал против того, что не опубликовал код.




Если в течение жизненного цикла вашей программы значение инкапсуляция неверно, возникает путаница. После просмотра вашего кода кажется, что вы пытаетесь получить доступ к чему-то из вечного класса. PrimaryKey id вызывается вместо переданного значения setId (id).
Вместо
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;
}
Я изменил частное на общедоступное, и у меня это работает. Спасибо.
@Cellojaan Переменные должны быть закрытыми, а конструкторы общедоступными, это принцип инкапсуляции.
для пояснения, PrimaryKey id, setId (Long id) this.fie_id = id. он вызывал PrimaryKey id?
извините, я изменил общедоступный на частный :) до того, как идентификатор стал общедоступным, когда я меняю частный, он работает для меня
Я не знаю, является ли это ошибкой, но в обычных обстоятельствах поля класса должны быть закрытыми и назначать сеттер / получатель для доступа к ним по причинам инкапсуляции. Но Room требует, чтобы они всегда были публичными.
Я думаю, что это не для частного / публичного, как указано выше. В моем случае имя columnInfo и переменная-член должны совпадать. Например, @ColumnInfo (name = "word") и частное строковое слово; и метод получения, например - public String getWord ();
Это связано с наименованием вашего PrimaryKey. Подпись вашего геттера и сеттера должна соответствовать имени переменной. В противном случае Room не сможет его найти.
Это означает, что переменная id должна иметь getId(), а переменная fie_id должна иметь getFie_id() в качестве получателя, то же самое касается сеттеров. Итак, либо переименуйте свой PrimaryKey, либо назовите свои геттеры и сеттеры соответственно.
Лучше придерживаться документации. Структуры чувствительны. ссылка на документацию Образец :
@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, варианты проекта - это как-то после изменения.
для геттера в сеттере просто следуйте шаблону get / set [A-Z] last lenght-1 поля, как в примере (field: mWord)
@Entity(tableName = "words")
public class Word {
@PrimaryKey
@NonNull
@ColumnInfo(name = "word")
private String mWord;
public Word(@NonNull String mWord) {
this.mWord = mWord;
}
public String getMWord() {
return mWord;
}
}
Единственное, что нужно изменить, это указать обновление области как «общедоступное», а не «частное».
Для меня это было из-за не заглавной буквы «м». Ниже работает:
@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")
}
}
Измените все модификаторы доступа на "public". Это решит проблему.
Вместо:
@PrimaryKey
private Long fie_id;
@ColumnInfo(name = "name")
private String name;
Использовать:
@PrimaryKey
public Long fie_id;
@ColumnInfo(name = "name")
public String name;
Попытайтесь сопоставить имя функции установки с объявленным именем переменной.
Форекс.
Существует логическая переменная, объявленная как
частное логическое значение attachment_status;
Получатель должен быть таким
public boolean getattachment_status () {
вернуть статус_приложения
}
или вы можете сделать вот так
public boolean getAttachment_status () {
вернуть статус_приложения
}
Я объявил свой получатель таким образом, и у меня была такая же ошибка
public boolean getAttachment () {
вернуть статус_приложения
}
но я реорганизовал его, и проблема была решена.
Для меня сработало изменение переменной с частной на защищенную.
Если все верно, то я наблюдал эту проблему в основном в случае переменных типа pId, uId и т. д.
изменить имя переменной с
private Long pId;
к
private Long pid;
И сгенерируйте геттер и сеттер с помощью IDE.
Может ты мне не веришь, но я должен сказать. Я использую Mac, и эта проблема была связана с компьютерным языком. Я использовал турецкий язык, и я перешел на английский, и эта проблема исчезла после недействительного кеширования и перезапуска.
В качестве резюме:
Изначально азербайджанский язык был выбран в качестве предпочтительного языка, по этой причине я столкнулся с той же проблемой
Комната Kotlin не позволяет определять переменные в начале класса сущности с символа «i». У меня была такая же ошибка. Решил, хоть и непросто. Замени id на pId, и все будет хорошо. Например;
val isrc: String? = "",
вместо
val albumIsrc: String? = "",
Если вы измените переменную таким образом, ошибка будет устранена. Удачного кодирования.
Примечание :, если системный язык ваших компьютеров - турецкий, то в этом случае.
Разместите код здесь, а не на внешнем сайте.