我正在创建一个电话节点,并在注册时将用户的号码存储在该节点中,以便应用程序要求他进行注册,并且如果他在注册之前尝试登录,则不会发送验证码。
我尝试通过Firebase查询将用户输入的电话号码与电话节点进行比较,以检查该电话号码是否存在。
if (v == btn_login) {
Toast.makeText(LoginActivity.this, "In Login Button", Toast.LENGTH_LONG).show();
String number = et_Phone.getText().toString().trim();
if (number.isEmpty() || number.length() < 10) {
et_Phone.setError("Valid number is required");
et_Phone.requestFocus();
return;
}
final String ph = "+92" + number.substring(1);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("phone");
Query query = ref.orderByChild("phonenumber").equalTo(ph);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Toast.makeText(LoginActivity.this, ph.toString(), Toast.LENGTH_LONG).show();
sendVerificationCode(ph);
L1.setVisibility(View.GONE);
L2.setVisibility(View.VISIBLE);
} else {
et_Phone.setError("Please enter the number again");
et_Phone.setText("");
et_Phone.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Firebase查询每次都返回null
答案 0 :(得分:2)
您的phone
节点只有一个属性phonenumber
。要查找具有您输入的值的属性,请使用:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("phone");
Query query = ref.orderByValue().equalTo("+923234022022");
要使用orderByChild("phonenumber")
,您要查询的位置需要有多个子节点,每个子节点又具有phonenumber
属性。像这样:
users: {
uidOfUser1: {
name: "Sikandar Niaz",
phonenumber: "5557273456"
},
uidOfUser2: {
name: "Frank van Puffelen",
phonenumber: "5554159410"
}
}
现在,在以上结构中,您可以使用orderByChild()
查找具有特定电话号码的子节点:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users");
Query query = ref.orderByChild("phonenumber").equalTo("5557273456");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
System.out.println(userSnapshot.getKey())
System.out.println(userSnapshot.child("name").getValue(String.class))
}
}
...
这将打印:
uidOfUser1
Sikandar Niaz