Java 无法获取当前用户的特定值

Java 无法获取当前用户的特定值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试从当前登录用户的Firebase获取频道id的值。以下是数据库的图像: 我从下面给出的代码中获取null值 FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference dbref = FirebaseDatabase.getInstance().getReference("Users/Clients"); dbref.addValueEventListener

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

我从下面给出的代码中获取
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) {

            }
        });
试试这个答案

 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) {

        }
    });

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

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,然后将其添加到路径并检索数据。

@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) {

    }
});

最后一个示例的优点是,它只检索
名称
属性,而不检索其他属性,即使以后在
用户ID
下添加更多子属性也是如此。此方法将为您节省带宽。

代码第2行中出现错误。当我将光标悬停在getCurrentUser()上时,getCurrentUser()给出了错误,它表示无法解析方法getCurrentUser()有效,但如果我想获取具有通道id的名称,此方法是否有效@Override public void onDataChange(@NonNull DataSnapshot DataSnapshot){String channel_Id=dataSnapshot.child(“channel_Id”).getValue().toString();String name=dataSnapshot.child(“name”).getValue().toString();Toast.makeText(getBaseContext(),“”+val,Toast.LENGTH_LONG).show();}@K132133SyedArsalanHussain检查我的回答是否有效,但如果我想获取具有通道id的名称,该工作是否会@Override public void onDataChange(@NonNull DataSnapshot DataSnapshot){String channel\u id=DataSnapshot.child(“通道id”).getValue().toString name=DataSnapshot.child(“名称”).getValue().toString();Toast.makeText(getBaseContext()),“”+val,Toast.LENGTH_LONG).show();}您得到的是什么?删除此Toast
Toast.makeText(getBaseContext(),“”+val,Toast.LENGTH_LONG).show()
在调试过程中,应用程序的codeclose中没有
val
变量,但他不希望出现错误,因为他在评论中告诉我,他希望检索频道id,而不仅仅是名称property@PeterHaddad在这种情况下,只有您的答案有效,但OP没有提到他想重试在他的问题中,我也提到了频道id。干杯!