Firebase查询返回空值,但该值存在

时间:2019-06-10 04:13:18

标签: android firebase firebase-realtime-database

我正在创建一个电话节点,并在注册时将用户的号码存储在该节点中,以便应用程序要求他进行注册,并且如果他在注册之前尝试登录,则不会发送验证码。

我尝试通过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

Database Structure here

1 个答案:

答案 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