繁体   English   中英

检查 Firebase 数据库中是否存在某些键值并执行一些操作 Android

[英]Check if some key value exists in Firebase Database and do some action Android

我想检查实时数据库中是否存在键的特定值,并根据它执行一些操作。

我有以下数据:

"Orders" : {
"03403426747" : {
  "17" : {
    "State" : "(4) Canceled",
    "address" : "yubt",
    "date" : "Feb 28, 2022",
    "discount" : "0",
    "name" : "uk",
    "phone" : "0311111111",
    "time" : "15:33:58 PM",
    "totalAmount" : "3778"
  },
  "18" : {
    "State" : "(1) Approved",
    "address" : "yubt",
    "date" : "Feb 28, 2022",
    "discount" : "120",
    "name" : "uk",
    "phone" : "03111111111",
    "time" : "16:01:58 PM",
    "totalAmount" : "7703"
  }
 }
}

我想检查这些订单中是否有除"(3) Completed""(4) Canceled"以外的"State"值。

如果任何人的订单具有除这些之外的值,我想从包含有挂单的用户的列表中删除该用户。 如果该用户在任何时候有新订单或旧订单 State 发生更改,我想再次将该用户添加到列表中。

我想检查这些订单中是否有除“(3) 已完成”和“(4) 已取消”以外的“状态”值。

您无法使用否定查询实时数据库。 您可以做的是为每个“其他”state 创建一个单独的查询,并在客户端加入结果。

但是,如果您考虑在某个时间点尝试使用Cloud Firestore ,那么您应该考虑使用不等于 (!=) 查询,或者如果它适合您的需要,则使用not-in查询。

良久,我脑子里的灯火通明,想出了一个办法。

为 OrderState 创建数据 class

public class OrderState {
public static int ordersCount = 0;

public static boolean state = false;

public static void update(boolean state){
    if (state){
        ordersCount = ordersCount + 1;
        OrderState.state = true;
    }else
        if (!state && ordersCount > 0){
                ordersCount = ordersCount - 1;
            if (ordersCount < 1) OrderState.state = false;
        }
}

public static void reset(){
    ordersCount = 0;
    state = false;
}
}

在 FirebaseRecyclerAdapter -> onBindViewHolder

//if order not canceled or completed. it will update OrderState, 
//ordersCount + 1 and state to true

if (adminOrders.getState().equals(Prevalent.orderStateNew) ||
                            adminOrders.getState().equals(Prevalent.orderStateApproved) ||
                            adminOrders.getState().equals(Prevalent.orderStateShipped) ||
                            adminOrders.getState().equals(Prevalent.orderStateApproved)){
                        OrderState.update(true);
                    }

                    changeUserWithOrderState();

关于管理员修改订单state

//if the order is not already cancelled or completed, reduce one order from OrderState as it will be readded automatically upon Recycler refresh.

if (!adminOrders.getState().equals(Prevalent.orderStateCanceled) &&
                                        !adminOrders.getState().equals(Prevalent.orderStateCompleted)) OrderState.update(false);

最后,如果用户没有任何状态为新、已批准和已发货的订单 OrderState.orderCount = 0; OrderState.state = false; 更新数据库后,它将 state 设置为 false。

private void changeUserWithOrderState() {
    DatabaseReference userWithOrder = FirebaseDatabase.getInstance().getReference()
            .child(Prevalent.usersWithOrders)
            .child(userPhoneKey);

   
    HashMap<String, Object> map = new HashMap<>();
    map.put(Prevalent.orderState, String.valueOf(OrderState.state));
    userWithOrder.updateChildren(map).addOnCompleteListener(task -> {
        //Changed state based upon OrderState.state value...
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM