Firebase OrderByChild () и EqualTo () не работает должным образом - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно найти существующего дочернего элемента внутри случайного ключа, и я использовал OrderByChild () и EqualTo () для фильтрации запросов, но он ведет себя так странно, что иногда он показывает, что дочерний элемент существует только для одного дочернего элемента, а иногда - нет.работа.

Firebase Structure

мне нужно проверить, существует ли ребенок (date_expense) "February_2019" или нет?я пробовал это

MainActivity

databaseReference = firebaseDatabase.getReference("Expenses_Details");
        expensesaddref = databaseReference.child(username).child("Expense_Month").child(monthyr); 
 int currentInt=Integer.parseInt(currentdate); 
        numberToWord((currentInt % 100));
        Log.d("date_string",String.valueOf(dateString)); 
        final String date_expense=expensesname +"" + dateString;
final ExpenseClass expenses=new ExpenseClass(expensesname,currentdate,date_expense,totalcost);

        expensesaddref.orderByChild("date_expense").equalTo(date_expense).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    Toast.makeText(getContext(), "Expense Already exists!!", Toast.LENGTH_SHORT).show();
                        }
                        else {
                            String key = expensesaddref.push().getKey();
                            expensesaddref.child(key).setValue(expenses);
                            showListAdd(expensesname);
                            Log.d("Adding", "Data Adding");
                        }





            }


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

            }
        }}

Примечание

если дочерний элемент уже существует в БД, то он должен отобразитьтост, но расходы снова прибавляются, даже если ребенок уже использует в программе db

monthYr - февраль_2019

Currentdate - дата настоящего дня

dateString - это дата в словах (т. Е. Один, одиннадцать, двадцать)

Это структура Firebase, которую получает Iam. date_expense добавляет, даже если дочерний элемент уже существует enter image description here

1 Ответ

0 голосов
/ 08 февраля 2019

Я обнаружил, что приведенный ниже код работает в соответствии с моими потребностями

ValueEventListener valueEventListener=new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                boolean isTitleAlreadyUsed = false;

                for (DataSnapshot ds: dataSnapshot.getChildren()) {

                    if (ds.hasChild("date_expense") && (expDate.equals(ds.child("date_expense").getValue()))) {
                        isTitleAlreadyUsed = true;
                    }
                }
                if(isTitleAlreadyUsed){
                    Toast.makeText(getContext(),"Exist",Toast.LENGTH_SHORT).show();
                }else
                {
                    String key=expensesaddref.push().getKey();
                    expensesaddref.child(key).setValue(expenseClass);
                    showListAdd(lower_exp);
                    Toast.makeText(getContext(),"Added",Toast.LENGTH_SHORT).show();
                }
            }

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

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