首页 文章

如何在Android中查询Firebase数据库

提问于
浏览
0

我对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();
        }**

2 回答

  • 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();
            }
    }
    
  • 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();
              }
            }
    

相关问题