我对Android Studio Firebase数据库有疑问。我目前正在尝试为查询添加条件,以便为选定的查询发送通知,在本例中,是在我的Firebase数据库中选择的send notification if MenuId=01
,希望对您有所帮助。
if (request.getFoods().isEmpty()) {
Toast.makeText(Cart.this, "Your cart is empty", Toast.LENGTH_SHORT).show();
} else{
final DatabaseReference MyMenuId = FirebaseDatabase.getInstance().getReference("foods");
final Query data = MyMenuId.orderByChild("MenuId").equalTo("01"); // get all node with menuID=01
试图弄清楚如何为此条件MenuId=01
设置条件,以便仅在选择此MenuId时发送通知:
data.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String order_number = String.valueOf(System.currentTimeMillis());
requests.child(order_number).setValue(request);
// Delete Cart
new Database(getBaseContext()).cleanCart();
Toast.makeText(Cart.this, "You have ordered from menu 1", Toast.LENGTH_SHORT).show();
finish();
sendNotificationOrder(order_number);
Toast.makeText(Cart.this, "You did not order from menuId 1", Toast.LENGTH_SHORT).show();
}**
答案 0 :(得分:0)
您无需放置条件即可使用 addListenerForSingleValueEvent,它将仅执行一次 找到目标值。。您正在使用addValueListener,它正在侦听节点中的所有值,并且您想要查找单个值,最好使用单个值侦听器。
DatabaseReference MyMenuId = FirebaseDatabase.getInstance().getReference("foods").child("MenuId").orderByChild("city").equalTo(
final Query data = MyMenuId.orderByChild("MenuId").equalTo("01"); // get all node with menuID=01
data.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String order_number = String.valueOf(System.currentTimeMillis());
requests.child(order_number).setValue(request);
// Delete Cart
new Database(getBaseContext()).cleanCart();
Toast.makeText(Cart.this, "You have ordered from menu 1", Toast.LENGTH_SHORT).show();
finish();
sendNotificationOrder(order_number);
Toast.makeText(Cart.this, "You did not order from menuId 1", Toast.LENGTH_SHORT).show();
}
}
答案 1 :(得分:0)
无论是否有结果,onDataChange
都会被调用。要检查是否有实际结果,请使用dataSnapshot.exists()
:
data.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
String order_number = String.valueOf(System.currentTimeMillis());
requests.child(order_number).setValue(request);
// Delete Cart
new Database(getBaseContext()).cleanCart();
Toast.makeText(Cart.this, "You have ordered from menu 1", Toast.LENGTH_SHORT).show();
finish();
sendNotificationOrder(order_number);
Toast.makeText(Cart.this, "You did not order from menuId 1", Toast.LENGTH_SHORT).show();
}
}
如果您需要实际处理结果,请记住以下几点。
对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
因此,您的代码需要通过遍历dataSnapshot.getChildren()
来处理结果列表:
data.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
String order_number = String.valueOf(System.currentTimeMillis());
requests.child(order_number).setValue(request);
// Delete Cart
new Database(getBaseContext()).cleanCart();
Toast.makeText(Cart.this, "You have ordered from menu 1", Toast.LENGTH_SHORT).show();
finish();
sendNotificationOrder(order_number);
Toast.makeText(Cart.this, "You did not order from menuId 1", Toast.LENGTH_SHORT).show();
}
}