【问题标题】:How to get a specific element in an array stored as a FieldValue in Firestore如何在 Firestore 中获取存储为 FieldValue 的数组中的特定元素
【发布时间】:2020-03-02 11:27:03
【问题描述】:

我在文档字段中存储了一组自定义类,例如“Patient”。它存储正确,但现在当我尝试将其下载到 android studio 时,日志语句中看起来像这样:-

[{"约会号码"=26, "name"="Neeraj Aggarwal", “电话号码”=“+917988081391”},{约会号码=27,姓名=Aaskah 夏尔马,电话号码=+917988081391},{约会号码=28,姓名=莫希特 sskm,电话号码=+917988081391}]

它看起来像一个数组,但我无法在此应用数组的任何属性。就像当我试图获取这个数组的第一个元素时一样,ArrayName[0] 然后它显示如下错误:

java.lang.ClassCastException: java.util.HashMap 不能转换为 com.example.reception.Patient (接收我的项目名称和您所知道的 Patient 是自定义的类名称)

我也不知道如何获取存储为字段值的数组中特定元素的值。就像我们可以通过documentsnapshot.get("Fieldname.Keyname")提取map的特定值一样,有没有这样的方法来获取数组中特定位置的元素。

【问题讨论】:

    标签: android arrays google-cloud-firestore


    【解决方案1】:

    Firebase 解决了我的问题。他们的回答是这样的:-

    Firebase 支持

    10:56 AM(29 分钟前)

    对我来说

    你好 Neeraj,

    我是 Ian,在这里回答您在使用 Firestore for Android 时可能遇到的任何问题。

    如果您对包含对象数组的字段使用 snapshot.get() 方法,Android SDK 会将该值作为 HashMap 对象的 Java 列表返回。目前无法覆盖此行为,因此您可能需要手动获取每个键值对并将值设置为 Patient 对象。

    话虽如此,可以一次性将整个文档快照转换为 Java 对象,而无需使用像 snapshot.get() 这样的方法。假设您的 Doctor 课程如下所示:

    public class Doctor {
        private List<Patient> patients;
        //other variables
    
        //Constructor must be empty
        public Doctor() {}
    
        public List<Patient> getPatients() {
            return patients;
        }
    
        public void setPatients(List<Patient> patients) {
            this.patients = patients;
        }
    

    只需一行代码,您就可以将文档快照转换为 Doctor 对象:

    Doctor doctor = snapshot.toObject(Doctor.class);
    

    从那里,您可以获得患者的 Java 列表,然后按预期对患者数据执行计算。

    所以所有的技巧就是使用 toObject 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2021-07-23
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多