Как сохранить массив в базе данных firestore с помощью Android? - PullRequest
0 голосов
/ 11 марта 2019

Я хочу создать модель пожарного депо, как показано ниже:

attendance_log (root collection)
|
|--- 001 (document ID)
|    |
|    |--- date : 20190310
|    |--- time : 1025
|    |--- subject : "Android Programming"
|    |--- present : {"MCA01", "MCA03", "MCA04"}
|    |--- absent : {"MCA02, "MCA05"}

Я могу сохранить дату, время и тему, передав значение на карте, как показано ниже:

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

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Не нужно беспокоиться, что вы очень близки к правильному коду.В 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;
    }

Надеюсь, это поможет вам.

0 голосов
/ 11 марта 2019

Решение в вашей ошибке - вам нужно прочитать ошибку и проверить, что она говорит - в вашем случае вы увидите, что массивы не поддерживаются, и вам нужно вместо этого отправить список.


Вы можете использовать Arrays.asList(yourArray) для преобразования вашего массива и отправки его в вашу базу данных.

Изменить эту строку:

attend.put("subject", subject) ;

К этой строке:

attend.put("subject", Arrays.asList(subject)) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...