Как проверить наличие определенного значения в базе данных Firebase в реальном времени? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь написать запрос, чтобы проверить, есть ли какой-либо статус "Ожидание" на mcustDeliveryStatus .Я хочу проверить узел Order , в котором есть какой-либо статус ожидания для mcustDeliveryStatus.

Example of my node:

Я написал следующий запрос

mDatabase = FirebaseDatabase.getInstance().getReference("Order");
final Query query = mDatabase.OrderByChild("mcustDeliveryStatus").equalTo("Pending");

                  query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                Toast.makeText(VWelcome.this, "new order", Toast.LENGTH_LONG).show();
                Intent i = new Intent(VWelcome.this, ViewOrderRequest.class);
                startActivity(i);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Этот запрос работает нормально, но проблема в том, что намерение выполняется, даже если в моем узле Order нет статуса Pending.Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 19 сентября 2019

Поскольку вы аннотируете свой DataSnapshot объект с помощью @NonNull, это означает, что вы сообщаете компилятору, что ваш объект не может быть null, поэтому он всегда будет что-то возвращать.Другими словами, если нет результатов, он вернет пустой объект DataSnapshot.Чтобы решить эту проблему, вы должны проверить, сколько детей находится внутри этого объекта, используя следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference orderRef = rootRef.child("Order");
Query query = orderRef.orderByChild("mcustDeliveryStatus").equalTo("Pending");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        long count = dataSnapshot.getChildrenCount();
        if (count > 0) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String mGasBand = ds.child("mGasBand").getValue(String.class);
                Log.d(TAG, mGasBand);
            }
        } else {
            Log.d(TAG, "No data!");
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...