[CustomClassMapper]: в классе Firebase Firestore не найдено сеттера / поля для ... - PullRequest
0 голосов
/ 03 апреля 2020

Я не знаю, почему у меня появляется это предупреждение:

W / Firestore: (21.3.1) [CustomClassMapper]: нет установщика / поля для lh. найдено в классе com.example.model.Liturgia

Код для получения данных:

    DocumentReference calRef = db.collection(CALENDAR_PATH).document(fechaYY).collection(fechaMM).document(fechaDD);
    calRef.addSnapshotListener((calSnapshot, e) -> {
        if ((calSnapshot != null) && calSnapshot.exists()) {
            mLiturgia = calSnapshot.toObject(Liturgia.class);
            DocumentReference dataRef = calSnapshot.getDocumentReference("lh.1");
            // ...

Модель

public class Liturgia {
    private Breviario lh;
    //...

    public Liturgia() {
    }

    @Exclude
    public void getlh() {
    }

    @PropertyName("lh")
    public void setLh(Breviario lh) {
        this.lh = lh;
    }
}

Документы

(A): calRef.

Как видно из кода, сначала я прочитал этот документ:

enter image description here

(B): calSnapshot.

А потом, во втором случае, я читаю другой документ, который упоминается в одном поле типа document in (A) :

enter image description here

И я сопоставляю этот второй документ с Liturgia.class.

Если я пытаюсь назвать метод как set lh() или пытаюсь без @PropertyName("lh"), предупреждение всегда отображается.

Код работает, как и ожидалось, но я не хочу видеть это предупреждение.

Я вижу этот ответ: W / Firestore: [CustomClassMapper]: нет установщика / поля для класса Android, но в моем случае, имя свойства и имя метод одинаков.

1 Ответ

2 голосов
/ 03 апреля 2020

Вы получаете следующее предупреждение:

W / Firestore: (21.3.1) [CustomClassMapper]: сеттер / поле для lh не найдено в классе com.example.model.Liturgia

Поскольку свойство lh в вашем классе Liturgia имеет тип Breviario, а в базе данных находится массив строк. Оба должны совпадать. Поэтому, если вам нужно сохранить текущие данные базы данных, измените это свойство на тип List<String>.

Кроме того, используйте:

@PropertyName("lh")

Это бесполезно, поскольку свойство в База данных уже называется lh. Так что в этом нет необходимости.

Редактировать:

Вот шаги для решения всей проблемы:

  1. Объявить lh свойство типа HashMap<String, Object>
  2. Удалите аннотацию @Ignore
  3. Измените тип возврата пустого поля получателя, чтобы получить HashMap<String, Object>
  4. Установить HashMap<String, Object> в сеттер.

Итак, вот си геттер:

public HashMap<String, Object> getLh() {
    return lh;
}

А для сеттера:

public void setLh(HashMap<String, Object> lh) {
    this.lh = lh;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...