我正在使用Firebase数据库。如何根据用户在文本字段中输入的电子邮件从数据库中检索值。下面是我的数据库结构。请帮助。
这是我的代码:
Ref = database.getReference("Registeration");
Ref.orderByChild("UserRegistration/email").equalTo(emailval).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
user_reg user=dataSnapshot.getValue(user_reg.class);
Toast.makeText(getApplicationContext(), user.toString(), Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:2)
你有:
Registration
UserRegistration
12
pushid
key:values
email:emailvalue
要检索值,您必须始终从上到下,因此您不能跳过任何节点。
只有orderByChild(..)
个查询可以跳过一个节点(这意味着如果你想让不是直接孩子的孩子,你可以使用这个查询)
试试这个:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Registration").child("UserRegistration").child("12");
ref.orderByChild("email").equalTo(emailenteredbyuser).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
String email=datas.child("email").getValue().toString();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
正如您在上面所看到的,引用遍历每个节点,直到节点12
。
然后使用此orderByChild("email").equalTo(emailenteredbyuser)
获取用户输入的电子邮件。
for (DataSnapshot datas : dataSnapshot.getChildren())
这个for循环datas
在12
的直接子节点内迭代,这是一种pushid,你不需要检索pushid来获取其中的值
答案 1 :(得分:1)
试试这个!在这里,我正在为每个循环运行以获得每个孩子。
Ref.child("UserRegistration").child("email").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot:dataSnapshot.getChildren()){
user_reg user=dataSnapshot.getValue(user_reg.class);
System.out.println(user.email);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});