将 firebase 实时数据检索到 android studio java 应用界面

Retrive firebase realtime data to android studio java app interface

我需要使用实时数据库上的用户邮箱来获取特定的用户数据。这是我的代码,此代码 运行 没有错误,但数据未显示在 interface.I 认为数据快照检索部分不正确。请帮我解决这个问题。

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    String userEmail = user.getEmail();

    DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference();


    Query myUsersQuery = rootReference.child("Children").orderByChild("childrenParentEmail").equalTo(userEmail);

   myUsersQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
  
                String name = dataSnapshot.child("Children").getValue(String.class);
                childrenNameEdt.setText(name);
                childrenBirthdayEdt.setText(dataSnapshot.child("childrenBirthday").getValue(String.class));
                childrenParentNameEdt.setText(dataSnapshot.child("childrenParentName").getValue(String.class));
                childrenParentAddressEdt.setText(dataSnapshot.child("childrenParentAddress").getValue(String.class));
                childrenParentContactNumberEdt.setText(dataSnapshot.child("childrenParentContactNumber").getValue(String.class));
                childrenParentEmailEdt.setText(dataSnapshot.child("childrenParentEmail").getValue(String.class));
                childrenTransportTypeEdt.setText(dataSnapshot.child("childrenTransportType").getValue(String.class));
                childrenTransportContactNumberEdt.setText(dataSnapshot.child("childrenTransportContactNumber").getValue(String.class));
                //childrenID.setText(dataSnapshot.child("password").getValue(String.class));
   
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            throw error.toException();

        }


    });

当您对 Firebase 实时数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您的代码需要通过遍历 dataSnapshot.getChildren() 来处理该列表。所以像:

myUsersQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot: dataSnapshot.getChildren();
            String name = snapshot.child("Children").getValue(String.class);
            childrenNameEdt.setText(name);
            ...