Android 如何在Firestore中将数组中的特定元素存储为FieldValue

Android 如何在Firestore中将数组中的特定元素存储为FieldValue,android,arrays,google-cloud-firestore,Android,Arrays,Google Cloud Firestore,我在文档字段中存储了一个自定义类数组,如“Patient”。它存储正确,但现在当我试图将其下载到android studio时,日志语句中似乎是这样的:- [{“任命编号”=26,“姓名”=Neeraj Aggarwal, “电话号码”=“+917988081391”},{appointmentnumber=27,name=Aaskah Sharma,电话号码=+917988081391},{appointmentnumber=28,name=Mohit sskm,电话号码=+917988081

我在文档字段中存储了一个自定义类数组,如“Patient”。它存储正确,但现在当我试图将其下载到android studio时,日志语句中似乎是这样的:-

[{“任命编号”=26,“姓名”=Neeraj Aggarwal, “电话号码”=“+917988081391”},{appointmentnumber=27,name=Aaskah Sharma,电话号码=+917988081391},{appointmentnumber=28,name=Mohit sskm,电话号码=+917988081391}]

它看起来像一个数组,但我不能在上面应用数组的任何属性。比如当我试图获取这个数组的第一个元素时,比如
ArrayName[0]
,它会显示错误,比如:

java.lang.ClassCastException:java.util.HashMap
无法强制转换为com.example.reception.Patient (如您所知,我的项目名称和患者是定制类名)


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

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

火基支援

上午10:56(29分钟前)

对我来说

你好,尼拉杰

我是伊恩,在这里回答任何关于使用Firestore for Android的问题

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

也就是说,可以一次性将整个文档快照转换为Java对象,而不需要使用snapshot.get()之类的方法。假设你的博士班是这样的:

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;
    }
从那里,您可以获得患者的Java列表,然后根据需要对患者数据执行计算


所以所有的技巧都只是使用toObject方法

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

火基支援

上午10:56(29分钟前)

对我来说

你好,尼拉杰

我是伊恩,在这里回答任何关于使用Firestore for Android的问题

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

也就是说,可以一次性将整个文档快照转换为Java对象,而不需要使用snapshot.get()之类的方法。假设你的博士班是这样的:

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;
    }
从那里,您可以获得患者的Java列表,然后根据需要对患者数据执行计算

所以所有的技巧都只是使用toObject方法