如何停止订单表上的更新?

时间:2019-04-15 07:43:10

标签: java android firebase-realtime-database google-apps-script

我想在Firebase数据库的Orders表上存储特定用户的许多订单。例如,如果用户从卖方1购买商品,他将进行结帐,然后他还将从卖方2购买商品并进行结帐。在这种情况下,用户将在“订单”表上拥有两个订单。

但是对于我而言,每次我尝试订购第二个物料时,它只是通过删除先前的订单并存储新的订单来更新数据库。

以下是我的结帐。我该如何解决?

private void confirmOrder() {

    final String saveCurrentDate, saveCurrentTime;

    Calendar calForDate = Calendar.getInstance();
    SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy");
    saveCurrentDate = currentDate.format(calForDate.getTime());
    SimpleDateFormat currentTime = new SimpleDateFormat("HH:mm:ss a");
    saveCurrentTime = currentTime.format(calForDate.getTime());

    final DatabaseReference ordersRef = FirebaseDatabase
            .getInstance().getReference().child("Orders")
            .child(Prevalent.currentOnlineUser.getEmail());

    final HashMap<String, Object> ordersMap = new HashMap<>();
    ordersMap.put("amount", totalAmount + "$");
    ordersMap.put("quantity", pQuantity);
    ordersMap.put("pname", pname);
    ordersMap.put("storename", storename);
    ordersMap.put("statep", statep);
    ordersMap.put("fullname", fullNameEditText.getText().toString());
    ordersMap.put("phone", phoneEditText.getText().toString());
    ordersMap.put("city", cityEditText.getText().toString());
    ordersMap.put("street", streetEditText.getText().toString());
    ordersMap.put("house", houseEditText.getText().toString());
    ordersMap.put("note", noteEditText.getText().toString());
    ordersMap.put("state", "not shipped");
    ordersMap.put("time", saveCurrentTime);
    ordersMap.put("date", saveCurrentDate);

    ordersRef.updateChildren(ordersMap).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                FirebaseDatabase.getInstance().getReference().child("Cart List")
                        .child("User view").child(Prevalent.currentOnlineUser.getEmail())
                        .removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Toast.makeText(CheckoutActivity.this, "Order Complete", Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(CheckoutActivity.this, HomeActivity.class);

                            //cleaning the cart list userView after the user has checked out the items
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(intent);
                            finish();
                        }
                    }

                });
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

现在,您正在用新订单覆盖以前的订单。如果您想保留旧订单,则需要维护清单。

针对您的情况的一种可能的解决方案是

final DatabaseReference ordersRef = FirebaseDatabase
            .getInstance().getReference().child("Orders")
            .child(Prevalent.currentOnlineUser.getEmail()).push();

此处的“ push()”函数创建一个具有uniqueId的子节点。


如果您想生成自己的uniqueId,则将'push()'替换为'child(newUniqueId)'。

final DatabaseReference ordersRef = FirebaseDatabase
            .getInstance().getReference().child("Orders")
            .child(Prevalent.currentOnlineUser.getEmail()).child(newUniqueId);

在这里,每个订单的“ newUniqueId”都必须不同。