您的位置:首页 > 移动开发 > Android开发

android详细信息java.util.ConcurrentModificationException变态

2015-09-14 08:10 633 查看
在今天做android当项目,我遇到了这个异常,好吧。其实最不寻常遇到异常IllegalstateException。它们与我们的硬件连接SDK抛出,我想折磨学生阿玉啊。扯远了。

今天,我想回到这个异常。java.util.ConcurrentModificationException异常,一開始我愣了一下。貌似从来没遇到过这个,然后果断百度大神。这才发现:

原因是你遍历该集合时。对该集合进行了删除元素的操作导致的。假设你有删除元素的必要,建议赋值到还有一个集合,然后对他进行删除操作.

偶出现错误的地方:

if (serverCards != null) {
for (PaymentCard serverCard : serverCards) {
MstCard matchingMstCard = findMatchingMstCard(serverCard,
mstCards);
ChargecaseCard matchingChargecaseCard = findMatchingChargecaseCard(
serverCard, chargecaseCards);
if (matchingMstCard != null && matchingChargecaseCard != null) {
matchingMstCard.setDominantColor(serverCard
.getDominantColor());
matchingChargecaseCard.setDominantColor(serverCard
.getDominantColor());
unifiedCards.add(new UnifiedCard(matchingMstCard,
serverCard, matchingChargecaseCard));
mstOnlyCards.remove(matchingMstCard);
chargecaseOnlyCards.remove(matchingChargecaseCard);
} else if (matchingMstCard != null
&& matchingChargecaseCard == null) {
matchingMstCard.setDominantColor(serverCard
.getDominantColor());
unifiedCards.add(new UnifiedCard(matchingMstCard,
serverCard));
mstOnlyCards.remove(matchingMstCard);
} else if (matchingMstCard == null
&& matchingChargecaseCard != null) {
matchingChargecaseCard.setDominantColor(serverCard
.getDominantColor());
unifiedCards.add(new UnifiedCard(serverCard,
matchingChargecaseCard));
chargecaseOnlyCards.remove(matchingChargecaseCard);
} else {
serverOnlyCards.add(serverCard);
}
}
}

for (MstCard card : mstOnlyCards) {
ChargecaseCard matchingChargecaseCard = findMatchingChargecaseCard(
card, chargecaseCards);
if (matchingChargecaseCard != null) {
matchingChargecaseCard
.setDominantColor(card.getDominantColor());
unifiedCards.add(new UnifiedCard(card, null,
matchingChargecaseCard));
chargecaseOnlyCards.remove(matchingChargecaseCard);
} else {
unifiedCards.add(new UnifiedCard(card));
}
}

for (ChargecaseCard card : chargecaseOnlyCards) {
unifiedCards.add(new UnifiedCard(card));
}

for (PaymentCard card : serverOnlyCards) {
unifiedCards.add(new UnifiedCard(card));
}

return unifiedCards;
在一个for循环中mstOnlyCards调用了,mstOnlyCards.remove()方法。

特记录之,引以为戒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: