Не найдено сеттера / поля для найденной Android Firebase
Я использовал FirebaseRecyclerAdapter, чтобы получить всех потомков "Pro", используя класс Model с именем " Spacecraft", и теперь я хочу получить всех кандидатов в потомок Pro, например "1".
Я создал публичный статический "кандидат" в "Космический корабль", и я использовал сеттеры и геттеры, но все еще та же ошибка
Это моя база данных:
это модельный класс
public class Spacecraft{
private String name;
private String desc;
private String last;
private candidat candidat;
public Spacecraft.candidat getCandidat() {
return candidat;
}
public void setCandidat(Spacecraft.candidat candidat) {
this.candidat = candidat;
}
public Spacecraft() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public static class candidat{
private String info;
private String namecandid;
public candidat(){}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getNamecandid() {
return namecandid;
}
public void setNamecandid(String namecandid) {
this.namecandid = namecandid;
}
}
}
Это мой код для FirebaseRecyclerAdapter
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Spacecraft, candidatviewholder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Spacecraft, candidatviewholder>(
Spacecraft.class,
R.layout.candidat,
candidatviewholder.class,
query){
@Override
protected void populateViewHolder(candidatviewholder viewHolder, Spacecraft model, int position) {
viewHolder.setName1(model.getCandidat().getNamecandid());
viewHolder.setInfo1(model.getCandidat().getInfo());
}
};
rv.setAdapter(firebaseRecyclerAdapter);
}
Ошибка:
В классе com.example.ilyas.evotingapplication.Spacecraft$candidat не найдено никакого установщика / поля для key1.
2 ответа
У меня была эта ошибка, но вышеуказанные решения не исправили ее. Надеюсь, это альтернативное решение поможет другим. Если эта ошибка возникает почти для каждой переменной, есть вероятность, что у вас включен Proguard и он удаляет неиспользуемые методы получения и установки. Чтобы это исправить, добавьте строку, аналогичную этой, в ваш файл proguard-rules.pro:
-keep class com.example.yourapp.ObjectClass
где ObjectClass - это имя вашего класса объектов Java, которое хранится в Firebase.
Я думаю, что просто ваши модели данных в Firebase и в Java отличаются.
В вашем классе Java, Spacecraft
класс имеет candidat
поле типа Candidat
, Но в базе данных candidat
поле действительно является вложенным объектом (картой), содержащим один ключ Key1
, какое значение является Candidat
состав.
Итак, в зависимости от того, чего вы хотели достичь:
- если вы хотите, чтобы у каждого космического корабля был ровно один кандидат: сохраните объект базы данных должным образом,
{info: "info 1", namecandid: "name 1"}
сохраняется прямо подcandidat
поле, а не на один уровень глубже, поэтому поле имеет типCandidat
в коде. - если вы хотите, чтобы у каждого космического корабля было несколько кандидатов: вместо
private Candidat candidat
поле, оно должно быть набраноMap<String, Candidat>
потому что это тип, который он имеет на скриншоте вашей базы данных.
У меня работают: - keepclassmembers class com.myPackageName.MyClassName {*; }