【问题标题】:How to store array in firestore database using Android?如何使用 Android 将数组存储在 Firestore 数据库中?
【发布时间】:2019-08-01 16:02:06
【问题描述】:

我想创建一个如下所示的 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

【问题讨论】:

  • 认真的吗? --->>>> "不支持序列化数组,请改用列表"
  • 你的主题变量里面有什么?它应该是 Object 而不是 array[]

标签: android arrays list google-cloud-firestore


【解决方案1】:

解决方案在于您的错误 - 您需要阅读错误并检查它的内容 - 在您的情况下,您会看到不支持数组,您需要发送列表。


您可以使用Arrays.asList(yourArray) 转换您的数组并将其发送到您的数据库。

改变这一行:

attend.put("subject", subject) ;

到这一行:

attend.put("subject", Arrays.asList(subject)) ;

【讨论】:

    【解决方案2】:

    无需担心您已经非常接近正确的代码。在 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;
        }
    

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2021-09-07
      • 2021-08-11
      相关资源
      最近更新 更多