我在文档字段中存储了一系列自定义类,例如“患者”。它存储正确,但是现在当我尝试将其下载到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的特定值一样,是否有类似的方法可以将元素放在数组中的特定位置。
答案 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方法。