繁体   English   中英

如何使用Android在firestore数据库中存储数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM