如何在单个键下显示所有购物车项目?

时间:2020-06-08 09:56:35

标签: java android firebase firebase-realtime-database

我尝试将所有项目添加到Firebase中的单个cartId下,但是当我尝试将其添加到单个cartId下时,却创建了一个不同的cartId每次。

这是屏幕截图。 enter image description here

第一个ID为UserId. 第二个ID为cartID。 第三个ID是ProductId

这是代码:

 private void addProductToCart() {
    cartReference = FirebaseDatabase.getInstance().getReference().child("Product In Cart");
    cartID = cartReference.push().getKey();
    final Cart cart = new Cart(name, quantity, price, url, id, cartID);
    checkreference = FirebaseDatabase.getInstance().getReference().child("Product In Cart").child(userID).child(cartID).child(id);
    checkreference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                Toast.makeText(DisplayProductDetails.this, "Already in Cart", Toast.LENGTH_LONG).show();
            } else {
                cartReference.child(userID).child(cartID).child(id).setValue(cart);
                Toast.makeText(DisplayProductDetails.this, "Added to Cart", Toast.LENGTH_LONG).show();
                Intent intent = new Intent(DisplayProductDetails.this, NavigationMenu.class);
                startActivity(intent);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
}

1 个答案:

答案 0 :(得分:0)

根据您的代码,我假设您正在使用Firebase Realtime Database。 也许学习这一行代码可以帮助解决此问题。

x

您正在创建一个新的cartID,然后将其分配给您创建的每个Cart对象。 如果您只想向购物车添加一个商品,这不会有问题,但是如果您在循环中执行此代码,那么当然会出现问题,因为每个购物车商品都会添加到新的,不同的商品中ID,而不是您先前创建的cartID。即使您像在该代码中那样将cartID存储为实例/静态变量,它也会被覆盖,尤其是在循环中执行而无需执行任何检查时。

您可能想要添加简单的检查,例如:

enter name: John
John 5
John 1
John 1
John 5
John 5
John 1
John 3
John 0
total 21

使用此方法,只要已经设置了cartID变量,就会将任何购物车项目分配给该cartID。