zoukankan      html  css  js  c++  java
  • android详细信息java.util.ConcurrentModificationException变态

    在今天做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()方法。


    特记录之,引以为戒。


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    敏捷开发宣言
    OpenGL SL 优化要点
    Cocoa Touch 开发框架
    MSIL详解
    Android之Services
    Android之ActivityII
    Android之Activity
    托管执行过程
    Android之Content ProviderII
    Android之Content Providers
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4806166.html
Copyright © 2011-2022 走看看