Java 如何让用户结构只知道他的电子邮件Firebase实时
我有一个实时数据库,其中包含一个子“用户”。这个孩子有不同的用户。 每个用户都有一组如下属性:用户(电子邮件、姓名、年龄、电话号码、性别) 我使用push函数将它们分离,并生成一个唯一的ID: 所以我的问题是:我想知道一个特定用户的所有属性,我只有他的电子邮件地址 我尝试过这个查询,但我不知道它到底是如何工作的Java 如何让用户结构只知道他的电子邮件Firebase实时,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个实时数据库,其中包含一个子“用户”。这个孩子有不同的用户。 每个用户都有一组如下属性:用户(电子邮件、姓名、年龄、电话号码、性别) 我使用push函数将它们分离,并生成一个唯一的ID: 所以我的问题是:我想知道一个特定用户的所有属性,我只有他的电子邮件地址 我尝试过这个查询,但我不知道它到底是如何工作的 reference.orderByChild("email").equalTo(email 您可以尝试以下方法:- DatabaseReference databaseRef
reference.orderByChild("email").equalTo(email
您可以尝试以下方法:-
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("User");
databaseReference.orderByChild("email").equalTo(email).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String email = dataSnapshot.child("email").getValue(String.class);
String age = dataSnapshot.child("age").getValue(String.class);
String fullName = dataSnapshot.child("fullName").getValue(String.class);
String gender = dataSnapshot.child("gender").getValue(String.class);
String phone_number = dataSnapshot.child("phone_number").getValue(String.class);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("TAG", "error is " + databaseError.getMessage());
}
});
请通过此链接了解有关从Firebase检索数据的更多信息
要显示该数据,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("users").orderByChild("email").equalTo(email);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
String age = ds.child("age").getValue(String.class);
//and so on
Log.d("TAG", name + " / " + age);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(eventListener);
这是一个在logcat中显示
名称
和年龄
的示例。同样,您也可以获得其他值。假设reference
是指向您的用户节点的数据库引用,此查询应该可以正常工作。您得到的结果是什么?不需要在客户端中的所有子节点上循环以找到具有匹配电子邮件地址的子节点(并且对用户的带宽造成了难以置信的浪费)databaseReference.orderByChild(“email”).equalTo(email).addChildEventListener
会解决这个问题。@FrankvanPuffelen哦,没有考虑性能,谢谢你指出:)