簡體   English   中英

Firebase查詢返回空值,但該值存在

[英]Firebase Query returning null value but the value exists

我正在創建電話節點,並在注冊時將用戶的號碼存儲在該節點中,以便應用程序要求他進行注冊,並且如果他在注冊之前嘗試登錄,則不會發送驗證碼。

我嘗試使用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

數據庫結構在這里

您的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM