Firebase Query возвращает нулевое значение, но значение существует - PullRequest
0 голосов
/ 10 июня 2019

Я создаю телефонный узел и сохраняю номер пользователя в этом узле во время регистрации, чтобы приложение запрашивало его регистрацию и не отправляло ему проверочный код, если он пытается войти перед регистрацией.

Я попробовал запрос 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 возвращает ноль каждый раз

Database Structure here

1 Ответ

2 голосов
/ 10 июня 2019

Ваш 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

Сикандар Ниаз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...