[英]How to Add/Update/Remove array elements in firebase firestore android using Hashmap? A Store Database
[英]How to store array in firestore database using Android?
我想创建一个如下所示的 Firestore 模型:
attendance_log (root collection)
|
|--- 001 (document ID)
| |
| |--- date : 20190310
| |--- time : 1025
| |--- subject : "Android Programming"
| |--- present : {"MCA01", "MCA03", "MCA04"}
| |--- absent : {"MCA02, "MCA05"}
我可以通过在 Map 中传递值来存储日期、时间和主题,如下所示:
Map<String, Object> attend = new HashMap<>();
attend.put("date", d) ;
attend.put("time", t) ;
attend.put("subject", subject) ;
db.collection("attendance_log")
.document(docID)
.set(attend)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid){
Toast.makeText(TakeAttendance.this,"Attendance added sucessfully" , Toast.LENGTH_LONG).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Snackbar.make(findViewById(R.id.cdlayout) ,"Something went wrong!", Snackbar.LENGTH_LONG).show();
}
});
但是传递数组会产生错误
java.lang.IllegalArgumentException: Could not serialize object. Serializing Arrays is not supported, please use Lists instead
解决方案是您的错误 - 您需要阅读错误并检查它说了什么 - 在您的情况下,您将看到不支持数组,您需要发送列表。
您可以使用Arrays.asList(yourArray)
转换数组并将其发送到数据库。
更改此行:
attend.put("subject", subject) ;
到这一行:
attend.put("subject", Arrays.asList(subject)) ;
无需担心您非常接近正确的代码。 在 firestore 中,您可以存储数组 String[] 而不是必须使用 List:
//convert array to arraylist
ArrayList<String> subjectsArrayList = getListOfSubjects(subjects);
Map<String, Object> attend = new HashMap<>();
attend.put("date", d) ;
attend.put("time", t) ;
attend.put("subject", subject) ;
hashMap.put("subjects", subjectsArrayList);
db.collection("attendance_log")
.document(docId)
.update(attend)
.addOnCompleteListener(task -> {
//done
});
这是getListOfSubjects
方法
public ArrayList<String> getListOfSubjects(String[] subjects){
List<String> subjectsArrayList = new ArrayList<>();
for (int i = 0; i < subjects.length; i++) {
subjectsArrayList.add(subjects[i]);
}
return (ArrayList<String>) subjectsArrayList;
}
希望这会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.