我有三个ArrayLists。一个是RecyclerView.Adapter正在显示的产品列表。这个叫做productList。第二个名为cartItems的列表,它基本上包含用户从productList中选择的所有产品。第三个叫做updatedCart,它包含购物车的所有更新值。我的目标是使用updatedCart列表更新我的cartItems和productList。我是通过比较productIds来做到这一点的。如果它们相等,我更新一个名为counter的值,否则我将其删除。但是,我一直遇到IllegalStateException。我也不是100%肯定我的逻辑。
这是我从updatedCart更新productList和cartItems的方法。
public void updateCartItems(ArrayList<Product> updatedCart) {
// "productList" is a full list of products that the adapter displays
// "cartItems" is a list of items user adds to the cart
// "updatedCart" is a list of updated cart items (user can remove an item or increase the number of items he's purchasing)
// i want the original "cartItems" and "productList" to update it's values according to the "updatedCart"
if (updatedCart.size() == 0) {
Iterator<Product> productIterator = cartItems.iterator();
while (productIterator.hasNext()) {
Product product = productIterator.next();
productIterator.remove();
}
for (Product listProduct : productList) {
listProduct.setCounter(0);
}
} else {
Iterator<Product> productIterator = cartItems.iterator();
while (productIterator.hasNext()) {
Product product = productIterator.next();
for (Product cartProduct : updatedCart) {
if (cartProduct.getProductId() != product.getProductId()) {
productIterator.remove();
} else {
product.setCounter(cartProduct.getCounter());
}
}
}
for (Product listProduct : productList) {
for (Product cartProduct : cartItems) {
if (listProduct.getProductId() == cartProduct.getProductId()) {
listProduct.setCounter(cartProduct.getCounter());
} else {
listProduct.setCounter(0);
}
}
}
}
notifyDataSetChanged();
}
这是我得到的错误
05-28 03:25:31.769 23280-23280/com.innovationsquare.organicshuttle E/InputEventSender: Exception dispatching finished signal.
05-28 03:25:31.769 23280-23280/com.innovationsquare.organicshuttle E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
05-28 03:25:31.771 23280-23280/com.innovationsquare.organicshuttle E/MessageQueue-JNI: java.lang.IllegalStateException
错误显示在productIterator.remove()
块的else
行。除了摆脱这个错误,我还想知道我的逻辑在这里是否合理。
帮助我stackoverflow,你是我唯一的希望。
答案 0 :(得分:0)
Fisrt all,第三个arraylist的目的是什么?如果用户更新(添加&删除&#39; s来自cartitems的东西),那么更新该cartitem列表...为什么要使用其他arraylist? 其次,你正在制作一个非常复杂的逻辑,直到你不能用每一个细节来描述完整的场景,例如productlist是一个包含产品数据的阵列(所有产品都显示用户),为什么要更新那个清单? 所以,尽量保持简单。制定另一个逻辑,在用户更新购物车后立即尝试更新productlist和cartitem。