Java 在Firebase中使用orderByChild时,如何获取节点名?
这是我的密码:Java 在Firebase中使用orderByChild时,如何获取节点名?,java,android,firebase,firebase-realtime-database,nosql,Java,Android,Firebase,Firebase Realtime Database,Nosql,这是我的密码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Query queryRef = mdatabase.child("Users").orderByChild("age"); queryRef.addValueEventListener(new
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Query queryRef = mdatabase.child("Users").orderByChild("age");
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot chatSnapshot: snapshot.getChildren()) {
User users = chatSnapshot.getValue(User.class);
String name = users.getName();
System.out.println(name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}); // Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false);
}
正如你们可能猜到的,这段代码是用来显示用户名的。但我实际上想做的是,基于相同的查询结果,我想显示他们的用户ID,而不是名称。我尝试使用这样的类来获取用户id:
public class User{
private String gender;
private Long age;
private String email;
private Long height;
private Long weight;
private String name;
private String type;
private String userId;
public User()
{
}
public User(String gender,Long age,String email,Long height,Long weight,String name,String type,String userId)
{
this.gender=gender;
this.age=age;
this.email=email;
this.height=height;
this.weight=weight;
this.name=name;
this.type=type;
this.userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
}
public String getId()
{
return userId;
}
public String getGender()
{
return gender;
}
public Long getAge()
{
return age;
}
public String getEmail()
{
return email;
}
public Long getHeight()
{
return height;
}
public Long getWeight()
{
return weight;
}
public String getName()
{
return name;
}
public String getType()
{
return type;
}}
但这会返回当前用户id 3次,因为我的数据库中有3个用户,而不是单个用户id。
这是我的数据库:
每个用户都有这么多值
我尝试的另一种方法是使用getKey(),如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Query queryRef = mdatabase.child("Users").orderByChild("age");
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot chatSnapshot: snapshot.getChildren()) {
String name = snapshot.getKey();
System.out.println(name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}); // Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false);
}
但这会返回节点“Users”3次,而不是用户id
有人能帮我吗?我想显示他们的用户ID。即:
OMBACIWG3FOURXY8SEQD8TAQL12,kZllc0GL1Vfbitt73WHWwJuXvXC2,lxVykDo9GQRcFmb0u1QZ0WCc9lg2
(根据图片)
非常感谢您的帮助。谢谢。您在错误的
DataSnapshot
处调用了getKey()
方法。
这就是你想要的
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot chatSnapshot: snapshot.getChildren()) {
String key = chatSnapshot.getKey();
System.out.println(key);
}
}
编辑:将userId设置为User
类
for (DataSnapshot chatSnapshot: snapshot.getChildren()) {
User user = chatSnapshot.getValue(User.class);
user.setUserId(chatSnapshot.getKey());
}
非常感谢。现在它工作得很好!:D只是出于好奇,有没有办法使用我在问题中提到的类来获取用户ID?这是不可能的,你必须手动设置它。我已经更新了我的答案@雅各布斯汀