Firebase OrderByChild()和EqualTo()无法正常工作 [英] Firebase OrderByChild() and EqualTo() is not working properly
问题描述
我需要在随机密钥中找到现有的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屋!