【问题标题】:[CustomClassMapper]: No setter/field for ... found on class in Firebase Firestore[CustomClassMapper]:在 Firebase Firestore 的类上找不到 ... 的设置器/字段
【发布时间】:2020-07-15 20:10:35
【问题描述】:

我不知道为什么会收到此警告:

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

正如你在代码中看到的,我首先阅读了这个文档:

(B):calSnapshot

然后,在第二种情况下,我阅读了另一份文档,该文档在 (A) 中的 document 类型的一个字段中引用:

我将第二个文档映射到Liturgia.class

如果我尝试将方法命名为 set lh() 或尝试不使用 @PropertyName("lh"),则警告始终显示。

代码按预期工作,但我不想看到这个警告。

我看到了这个答案:W/Firestore: [CustomClassMapper]: No setter/field for class Android 但在我的情况下,属性的名称和方法的名称是相同的。

【问题讨论】:

  • 嘿A.!请编辑您的问题并添加文档的屏幕截图。
  • @AlexMamo 我编辑了问题。
  • 我明白了,我马上给你写一个答案。

标签: java android firebase google-cloud-firestore


【解决方案1】:

您收到以下警告:

W/Firestore:(21.3.1) [CustomClassMapper]:在类 com.example.model.Liturgia 上找不到 lh 的设置器/字段

因为Liturgia 类中的lh 属性是Breviario 类型,而在数据库中是一个字符串数组。两者必须匹配。因此,如果您需要保留当前数据库数据,请将该属性更改为 List<String> 类型。

除此之外,使用:

@PropertyName("lh")

它没有用,因为数据库中的属性已经被称为lh。所以没有必要。

编辑:

以下是解决整个问题的步骤:

  1. lh 属性声明为HashMap<String, Object> 类型
  2. 删除@Ignore 注释
  3. 更改getter void的返回类型以返回HashMap<String, Object>
  4. 在设置器中设置HashMap<String, Object>

所以,这里是吸气剂:

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

对于二传手:

public void setLh(HashMap<String, Object> lh) {
    this.lh = lh;
}

【讨论】:

  • 数据库中的lh属性是数组类型,不是字符串!所以你需要把它改成Lis&lt;String&gt;。在 setter 前面添加 @Exclude 是没有用的。
  • 应该,现在就好了。祝您的项目好运,并在您投入使用时向我们展示。
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多