无法获得当前用户的特定值

时间:2018-08-14 15:35:16

标签: java android firebase firebase-realtime-database

我正在尝试从登录的当前用户的Firebase中获取channel_id的值。以下是数据库的图像:

Firebase Database Image

我从下面给出的代码中获得null的值。

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference dbref = 
    FirebaseDatabase.getInstance().getReference("Users/Clients");
  dbref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String val =String.valueOf(dataSnapshot.getValue());
                Toast.makeText(getBaseContext(),""+val,Toast.LENGTH_LONG).show();
            }

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

            }
        });

3 个答案:

答案 0 :(得分:0)

尝试这个答案

 FirebaseDatabase database = FirebaseDatabase.getInstance();
 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
 String userId=user.getUid();
 DatabaseReference dbref = 
 FirebaseDatabase.getInstance().getReference("Users/Clients").child(userId);
 dbref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String channel_Id=dataSnapshot.child("channel_id").getValue().toString();

        }

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

        }
    });

答案 1 :(得分:0)

要获取当前的用户信息,请尝试以下操作:

FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId=user.getUid();
DatabaseReference dbref = FirebaseDatabase.getInstance().getReference("Users/Clients").child(userId);
 dbref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String names=dataSnapshot.child("name").getValue().toString();
    }

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

    }
});

在这里检索当前的用户ID,然后将其添加到路径并检索数据。

答案 2 :(得分:0)

@Peter Haddad的答案将非常有用,还有一种替代方法是使用以下方法将侦听器直接附加到name属性:

FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userId=user.getUid();
DatabaseReference dbref = FirebaseDatabase.getInstance().getReference("Users/Clients/"+userId+"/name");
 dbref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String names=dataSnapshot.getValue(String.class);
    }

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

    }
});

最后一个示例的优势在于,即使稍后在name下添加更多子属性,它也仅检索userId属性。这种方法将节省您的带宽。