现在我正在做一个购物车列表,当用户将产品添加到购物车时,我将数量设置为= 1,当用户打开购物车时,它将显示购物车中产品的总价,在这里用户可以增加/减少购物车中的产品数量,总价格将一起更新。我现在面临的问题是当我增加或减少产品数量时,它显示的总价不正确
下面是CartActivity代码:
@Override
public void onStart()
{
super.onStart();
final DatabaseReference cartListRef = FirebaseDatabase.getInstance().getReference().child("Cart List");
FirebaseRecyclerOptions<Cart> options =
new FirebaseRecyclerOptions.Builder<Cart>()
.setQuery(cartListRef.child("Cart")
.child(("Products")), Cart.class)
.build();
FirebaseRecyclerAdapter<Cart, CartViewHolder> adapter = new FirebaseRecyclerAdapter<Cart, CartViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final CartViewHolder cartViewHolder, final int i, @NonNull final Cart cart)
{
cartViewHolder.btn_quantity.setNumber(cart.getQuantity());
cartViewHolder.txtProductPrice.setText("Price = RM"+cart.getPrice());
cartViewHolder.txtProductName.setText(cart.getProductName());
cartViewHolder.btn_quantity.setOnValueChangeListener(new ElegantNumberButton.OnValueChangeListener() {
@Override
public void onValueChange(ElegantNumberButton view, int oldValue, int newValue)
{
cart.setQuantity(String.valueOf(newValue));
cartListRef.child("Cart").child("Products").child(cart.getProductName()).child("quantity").setValue(String.valueOf(newValue));
getTotal();
}
private void getTotal()
{
TotalPrice += (Integer.valueOf(cart.getPrice()) * Integer.valueOf(cart.getQuantity()));
}
});
TotalPrice += (Integer.valueOf(cart.getPrice()) * Integer.valueOf(cart.getQuantity()));
}
Firebase实时数据库:
{
"Cart List" : {
"Cart" : {
"Products" : {
"BenQ" : {
"MemPrice" : "150",
"Price" : "300",
"ProductName" : "BenQ",
"date" : "27 Dec 2019",
"quantity" : "2",
"time" : "00:37:56 a.m."
},
"Dell" : {
"MemPrice" : "5000",
"Price" : "10000",
"ProductName" : "Dell",
"date" : "26 Dec 2019",
"quantity" : "4",
"time" : "20:52:07 p.m."
},
"Logitech" : {
"MemPrice" : "5",
"Price" : "10",
"ProductName" : "Logitech",
"date" : "26 Dec 2019",
"quantity" : "1",
"time" : "20:42:58 p.m."
}
}
}
},
"Product" : {
"Product1" : {
"Barcode" : "112233",
"MemPrice" : "5",
"Price" : "10",
"ProductName" : "Logitech"
},
"Product2" : {
"Barcode" : "123456",
"MemPrice" : "5000",
"Price" : "10000",
"ProductName" : "Dell"
},
"Product3" : {
"Barcode" : "778899",
"MemPrice" : "150",
"Price" : "300",
"ProductName" : "BenQ"
}
}
}
我使用屏幕截图更清楚地说明了我的意思
第一张图片没有问题,但第二张图片的总价应为RM 40610,但显示RM 112140
我希望有人可以帮助我找出代码中的问题或教我如何解决此问题。谢谢!
答案 0 :(得分:1)
据我所知,导致问题的代码在这里:
cartViewHolder.btn_quantity.setOnValueChangeListener(new ElegantNumberButton.OnValueChangeListener() {
@Override
public void onValueChange(ElegantNumberButton view, int oldValue, int newValue)
{
cart.setQuantity(String.valueOf(newValue));
cartListRef.child("Cart").child("Products").child(cart.getProductName()).child("quantity").setValue(String.valueOf(newValue));
getTotal();
}
private void getTotal()
{
TotalPrice += (Integer.valueOf(cart.getPrice()) * Integer.valueOf(cart.getQuantity()));
}
});
TotalPrice += (Integer.valueOf(cart.getPrice()) * Integer.valueOf(cart.getQuantity()));
最初,您正在此视图持有者中计算商品的价格,并将其添加到总计中:TotalPrice += (Integer.valueOf(cart.getPrice()) * Integer.valueOf(cart.getQuantity()));
。
但是,每次用户更改数量时,您都会再次将此持有人中所有商品的价格加到总计中。
所以说:
解决方案是仅添加oldValue
和newValue
项目之间的成本差:
public void onValueChange(ElegantNumberButton view, int oldValue, int newValue)
{
cart.setQuantity(String.valueOf(newValue));
cartListRef.child("Cart").child("Products").child(cart.getProductName()).child("quantity").setValue(String.valueOf(newValue));
TotalPrice = TotalPrice + (newValue - oldValue) * cart.getPrice();
}
一个不相关的建议:您将数字值作为字符串存储在数据库中,这会导致代码中进行大量类型转换。如果您将数值存储为实际数字,则可以摆脱所有的Integer.valueOf(...)
和String.valueOf(...)
调用,并使代码更短,更易于阅读。