【发布时间】:2019-07-01 18:31:29
【问题描述】:
我需要在 Random Key 中找到现有的 Child,并且我已经使用 OrderByChild() 和 EqualTo() 来过滤查询,但它的行为很奇怪,有时它显示子只存在于一个 Child 而有时它不存在工作。
我需要检查“February_2019”的孩子(date_expense)是否存在?我试过这个
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 中,那么它应该显示 toast 但即使孩子已经是 db,费用也会再次增加
在节目中,
monthYr 是 2019 年 2 月
Currentdate 是当前日期
dateString 是单词中的日期(即一、十一、二十)
【问题讨论】:
-
当您在调试器中运行该代码时会发生什么?
onDataChange是否被触发?如果有,dataSnapshot.exists()是什么? -
另外请注意,如果您确定变量的所有值都是正确的,您还应该能够使用硬编码路径重现问题。这将有助于排除导致问题的任何变量。
-
是
onDatachange它的触发..如果孩子已经存在于数据库中,那么它应该显示吐司,但即使孩子已经是数据库,费用也会再次增加@Frank van Puffelen -
出于检查目的,我已经执行了这一行
expensesaddref.orderByChild("expensesName").equalTo(expensename)它工作正常,但expensesaddref.orderByChild("date_expense").equalTo(date_expense)不工作 -
听起来
date_expense没有正确的值。你能用date_expense的硬编码值重现这个问题吗?
标签: android firebase android-studio firebase-realtime-database