Firebase OrderByChild()和EqualTo()无法正常工作 [英] Firebase OrderByChild() and EqualTo() is not working properly

查看:121
本文介绍了Firebase OrderByChild()和EqualTo()无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在随机密钥中找到现有的Child,并且使用OrderByChild()和EqualTo()来过滤查询,但是它的行为太奇怪了,因为有时它显示仅一个Child存在,而有时却不存在工作.

I need to find the existing Child inside the Random Key and I have used OrderByChild() and EqualTo() to filter the queries but it behaves soo weird that for sometimes it showing child exists for only one Child and for sometimes it doesnot work.

我需要检查"2019年2月"的孩子(date_expense)是否存在?我已经尝试过了

i need to check for the child (date_expense) of "February_2019" exist or not? i've tried this

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,费用也会再次增加

if child exist already in db then it should display toast but expense is again adding even though the child is already db

在程序中,

monthYr 是February_2019

monthYr is February_2019

Currentdate 是当天的日期

dateString 是用字表示的日期(即1、11、20)

dateString is date in words(ie one,Eleven,Twenty)

这是Iam正在获取的Firebase结构. date_expense 正在添加,即使子代已经存在

This is the Firebase structure what Iam getting .date_expense is adding even though child is exist already

推荐答案

我发现以下代码根据我的需要工作

i have found that the below code working as per my need

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);

这篇关于Firebase OrderByChild()和EqualTo()无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆