Java 无法获取当前用户的特定值
我正在尝试从当前登录用户的Firebase获取频道id的值。以下是数据库的图像: 我从下面给出的代码中获取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
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();}您得到的是什么?删除此ToastToast.makeText(getBaseContext(),“”+val,Toast.LENGTH_LONG).show()
在调试过程中,应用程序的codeclose中没有val
变量,但他不希望出现错误,因为他在评论中告诉我,他希望检索频道id,而不仅仅是名称property@PeterHaddad在这种情况下,只有您的答案有效,但OP没有提到他想重试在他的问题中,我也提到了频道id。干杯!