报这个错网上很多附带for遍历原理的源码,这里就不再说了。
解决办法有两个,1,for遍历时只记录下标不做增加删除等操作for遍历结束在做操作,针对单个for简单实用
2, // 用同步,加枚举器,避免ConcurrentModificationException可解决多个for遍历同一个list需在每个for都加上 synchronized
/** 得到缓存的对应评论的待回复内容 */
public String getReplyStateComment(String tag) {
// 用同步,加枚举器,避免ConcurrentModificationException
Iterator<ReplyCommentEditState> iterator = mReplyStateComment.iterator();
synchronized (this) {
while (iterator.hasNext()) {
ReplyCommentEditState rc = iterator.next();
if (rc.mCommentTag.equals(tag)) {
return rc.mRelpy;
}
}
}
// for (ReplyCommentEditState rc : mReplyStateComment) {
// if (rc.mCommentTag.equals(tag)) {
// return rc.mRelpy;
// }
// }
return "";
}
/** 删除一条缓存的待回复内容 */
public void removeReplyStateComment(String tag) {
// 用同步,加枚举器,避免ConcurrentModificationException
Iterator<ReplyCommentEditState> iterator = mReplyStateComment.iterator();
synchronized (this) {
while(iterator.hasNext()){
ReplyCommentEditState rc= iterator.next();
if (rc.mCommentTag.equals(tag)) {
iterator.remove();
}
}
}
// for (ReplyCommentEditState rc : mReplyStateComment) {
// if (rc.mCommentTag.equals(tag)) {
// mReplyStateComment.remove(rc);
// }
// }
}
/** 缓存一条评论对应的回复内容 */
public void saveReplyStateComment(String tag, String reply) {
boolean isExist = false;
// 用同步,加枚举器,避免ConcurrentModificationException
Iterator<ReplyCommentEditState> iterator = mReplyStateComment.iterator();
synchronized (this) {
while(iterator.hasNext()){
ReplyCommentEditState rc= iterator.next();
if (rc.mCommentTag.equals(tag)) {
isExist = true;// 存在当前项
rc.mRelpy = reply;// 修改已缓存的内容
}
}
// for (ReplyCommentEditState rc : mReplyStateComment) {
// if (rc.mCommentTag.equals(tag)) {
// isExist = true;// 存在当前项
// rc.mRelpy = reply;// 修改已缓存的内容
// }
// }
if (!isExist) {
ReplyCommentEditState aReply = new ReplyCommentEditState();
aReply.mCommentTag = tag;
aReply.mRelpy = reply;
mReplyStateComment.add(aReply);// 保存新数据
}
}