Не найдено сеттера / поля для найденной 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 {*; }

Другие вопросы по тегам