无法在Firebase Android中检索CurrentUser的数据

时间:2019-07-01 06:43:13

标签: java android firebase firebase-realtime-database

With reference to this Question我正在尝试使用Android从FireBase数据库获取当前UserData。

这是我的代码:

auth = FirebaseAuth.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();
    FirebaseUser user = auth.getCurrentUser();

    databaseReference.child("users").child(user.getUid()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot){
            String userID = (String) dataSnapshot.child("name").getValue();
            Log.d("TAG", "Name: " + userID);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}

    });

每当我运行该应用程序时,即使用户已登录,它也会为我提供NULL。

LogCat:

D/TAG: Name: null

我的数据库: enter image description here

请帮助我检索数据库的名称节点。

2 个答案:

答案 0 :(得分:2)

在您的数据库中,您没有使用userid。这个ID -Li1boDBTPV_59sXL7XI是由push()方法生成的随机ID,这就是为什么您会得到null的原因。

您需要更改将数据添加到以下内容的方式:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users");
FirebaseAuth auth     = FirebaseAuth.getInstance();
FirebaseUser user     = auth.getCurrentUser();

ref.child(user.getUid()).child("name").setValue("Darryl Fernand");
ref.child(user.getUid()).child("email").setValue("fernsdarryyl@gmail.com");
ref.child(user.getUid()).child("gender").setValue("male");

然后,您将可以使用userId检索数据。

答案 1 :(得分:1)

通过这样的实现来获取名称-

 FirebaseAuth auth = FirebaseAuth.getInstance();
            FirebaseUser user = auth.getCurrentUser();
            String uId = firebaseAuth.getCurrentUser().getUid() + "";
            FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference myRef = database.getReference("users");

                        myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {

                                boolean hasId = dataSnapshot.hasChild(uId);

                                if(hasId){

                                    String name = dataSnapshot.child("name").getValue().toString() + "";
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                            }
                        }); 

应该工作正常。希望对您有帮助!