如何使用java从firebase数据库中的列表中获取所有值?

Posted

技术标签:

【中文标题】如何使用java从firebase数据库中的列表中获取所有值?【英文标题】:How to get all the values from the list in firebase database using java? 【发布时间】:2021-12-25 12:53:35 【问题描述】:

我想获取列表中的所有字段值。我试过了,但我的项目为空。请帮我解决一下这个。我尝试使用 addOnChildEventListener() 获取所有值,但将所有元素都设置为 null。所以我没有解决如何获取所有这些值并将它们添加到代码中键入的适当列表的解决方案。

代码如下:

    private void listViewDataListener() 
    FirebaseDatabase
            .getInstance()
            .getReference(classCreatorPhoneNo + "/" + "class_list" + "/" + classUuid + "/" + "attendance" + "/" + attendanceDate + "/" + subjectUuid + "/" + lectureRank)
            .addChildEventListener(new ChildEventListener() 
                @Override
                public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) 
                    studentStatusList.add(snapshot.child("student_status_list").getValue(String.class));
                    studentUuidList.add(snapshot.child("student_uuid_list").getValue(String.class));
                    cardBackgroundColor.add(snapshot.child("background_color_list").getValue(String.class));
                

                @Override
                public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) 

                

                @Override
                public void onChildRemoved(@NonNull DataSnapshot snapshot) 

                

                @Override
                public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) 

                

                @Override
                public void onCancelled(@NonNull DatabaseError error) 

                
            );

【问题讨论】:

【参考方案1】:

问题在于您的所有三个getValue 调用,所以让我们看一个:

studentStatusList.add(snapshot.child("student_status_list").getValue(String.class));

如果我们在您的屏幕截图中查看student_status_list,它不是一个单一的String 值,而是一个值列表。因此在student_status_list 快照上调用getValue(String.class) 将返回null,因为该节点的值不是字符串。

如果您想显示student_status_list 下的所有值,您可以遍历子快照来执行此操作:

for (DataSnapshot statusSnapshot: snapshot.child("student_status_list").getChildren()) 
  String status = statusSnapshot.getValue(String.class));
  studentStatusList.add(status);

您必须对其他节点执行相同的操作:任何时候您有多个不知道其密钥的子节点时,您可以遍历 getChildren() 以访问这些子节点。

【讨论】:

我试过了,但仍然得到一个空列表。日志:+911234567890/class_list/d58d65e6-759b-4b4f-945d-11ca2d1182da/attendance/13-11-2021/b518d46f-946d-4ca5-9cfc-56f2d71fa5b9/1 2021-11-21/21 11:42-46546。 com.vrs.attendy D/RetakeAttendance: studentStatusList : [] 现在它正在工作。我的错是我使用的是 childEventListener() 而我必须使用 addListenerForSingleValueEvent()。

以上是关于如何使用java从firebase数据库中的列表中获取所有值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从firebase检索多个数据到android中的列表视图?

如何从 firebase 数据库中检索完整的用户列表?

如何使用 Flutter 从 Firebase 中的两个集合中获取数据

如何从firebase列表中删除项目

如何使用 Swift 中的 url 从 firebase 正确检索数据?

如何使用 AngularFire 从 FireBase 存储中获取文件列表