首页 > 解决方案 > 从 Firebase 检索 ArrayList

问题描述

我在 Firebase 中有一个对象的 ArrayList,我想检索它。我有 2 个数组列表。一弦一品。当我尝试使用对象数组时出现问题:

java.lang.ClassCastException:java.util.HashMap 无法转换为 com.example.gradecalculator.Grade

mDocRef:

private DocumentReference mDocRef = FirebaseFirestore.getInstance().document("myData/Arrays");

上传数组:

    Map<String, Object> dataToSave = new HashMap<String, Object>();
    dataToSave.put("StringsArray", stringGrades); // Save Strings Array
    dataToSave.put("ObjectsArray", grades); // Save Objects Array
    mDocRef.set(dataToSave).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.d(TAG, "Document has been saved!");
            Toast.makeText(getApplicationContext(), "List has been saved successfully!", Toast.LENGTH_SHORT).show();

下载数组:

        mDocRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            isListEmpty = false;
            if (documentSnapshot.exists()) {
                Map<String, Object> dataToLoad = (HashMap<String, Object>) documentSnapshot.getData();
                stringGrades = (ArrayList<String>) dataToLoad.get("StringsArray");
                grades = (ArrayList<Grade>) dataToLoad.get("ObjectsArray");

                for (Grade grade : grades) {    // <------------Fails here
                    System.out.println(grade.toString());
                }

我第一次尝试使用 Firebase。似乎它成功地将数据保存在服务器中。有什么建议吗?

标签: javaandroidfirebasearraylistgoogle-cloud-firestore

解决方案


DocumentSnapshot的get方法返回一个Map列表

List<Map<String, Object>>

您可以使用您的 List 创建另一个类:

  class GradeContainer{
      private List<Grade> grades;

      public GradeContainer(){}
      
      public List<Grade> getGrades(){
          return grades;
      }
    }

并使用dataToLoad.toObject()

grades = List<Grade> dataToLoad.toObject(GradeContainer.class).getGrades();

您可以阅读此文档以获取更多信息:

https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/DocumentSnapshot?hl=en

而本教程:

https://medium.com/firebase-tips-tricks/how-to-map-an-array-of-objects-from-cloud-firestore-to-a-list-of-objects-122e579eae10


推荐阅读