如何获取数组中作为FieldValue存储在Firestore中的特定元素

时间:2019-11-06 02:44:00

标签: android arrays google-cloud-firestore

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

  

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

这似乎是一个数组,但是我无法对此应用数组的任何属性。就像当我尝试获取该数组的第一个元素,例如ArrayName[0]时,它显示了如下错误:

java.lang.ClassCastException: java.util.HashMap无法转换为com.example.reception.Patient (接收我的项目名称和您所知的患者是自定义的班级名称)

我也不知道如何获取存储为字段值的数组中特定元素的值。就像我们可以通过documentsnapshot.get(“ Fieldname.Keyname”)提取map的特定值一样,是否有类似的方法可以将元素放在数组中的特定位置。

1 个答案:

答案 0 :(得分:0)

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

  

Firebase支持

     

10:56 AM(29分钟前)

对我

  

你好Neeraj,

     

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

     

如果您在包含对象数组的字段上使用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方法。