首页 > 解决方案 > 如何修复 dataSnapshot.getValue() 检索空值?

问题描述

好的,所以我试图从我的数据库中提取用户 ID 下的单个用户的电子邮件,它检索到 null。

userUID 是 authUID。

我的数据库结构

当我将行更改为: String value = dataSnapshot.child("email").getKey();

它检索正确的密钥,因此据我所知,我站在数据库的正确位置。

 myDatabaseRef.child(userUID).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                try{

                        String value = dataSnapshot.child("email").getValue(String.class);
                        //String value = dataSnapshot.child("email").getKey(); gets email
                        Log.d("TAG", "onDataChange: " + value);

                }
                catch (Exception ex){
                    Log.d("PROBLEM",ex.toString());
                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

我得到的错误:

2019-07-30 10:42:29.566 14673-14673/com.example.h210.housecommitteemanage D/TAG: onDataChange: null

标签: androidfirebase-realtime-database

解决方案


试试这个,下面的代码将获取所有用户的电子邮件:

FirebaseDatabase.getInstance().getReference("DataUsers").child("Users").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            try{
                Iterable<DataSnapshot> snapshotIterable = dataSnapshot.getChildren();
                for (DataSnapshot aSnapshotIterable : snapshotIterable) {
                    String value =  aSnapshotIterable.child("email").getValue(String.class);
                    Log.e(Constants.TAG, "Users email : " + value);
                }

            }catch (Exception ex){
                Log.e("PROBLEM",ex.toString());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

推荐阅读