gpt4 book ai didi

java - android: ConcurrentModificationException 与 map 覆盖

转载 作者:行者123 更新时间:2023-11-30 04:23:06 25 4
gpt4 key购买 nike

我曾尝试在其他线程中查找此内容并将我在那里找到的解决方案应用到我自己的问题中,但似乎没有任何效果。所以这里是:

在我的一个类中,它创建了一个新的多边形叠加层:

 public void addPolyLines(ArrayList<KrollDict> polyLines){
// Remove the line overlay
List<Overlay> mMapOverlays = view.getOverlays();
boolean rm = mMapOverlays.remove(polyLineOverlay);

polyLineOverlay = new PolygonOverlay(polyLines); // KEY LINE

mMapOverlays.add(polyLineOverlay);
view.invalidate();
}

这些是我的 PolygonOverlay 类的内容。在 while(it.hasNext()) 行抛出并发修改异常,我不明白为什么。我不相信我正在修改 mPolyLines 数组。 drawLines是从Overlays原生的draw方法中调用的,有时候看起来好像一直在调用。

ArrayList<KrollDict> mPolyLines;

public PolygonOverlay(ArrayList<KrollDict> polyLines){
mPolyLines = polyLines;
}

public void drawLines(MapView mv, Canvas canvas) {
Iterator<KrollDict> it = mPolyLines.iterator();

// Go through each line
while(it.hasNext()){// CONCURRENTMODIFICATIONEXCEPTION THROWN HERE
KrollDict kd = it.next();
String[] pointsArr = kd.getStringArray("points");
String color = kd.getString("color");
float width = new Float(kd.getDouble("width")).floatValue();
int alpha = kd.getInt("alpha");

int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
Paint paint = new Paint();
paint.setColor(Color.parseColor(color));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(width);
//paint.setAlpha(alpha);

// Loop through the coordinates
for(int i = 0; i< pointsArr.length; i++){
String[] coordinates = convertStringToArray(pointsArr[i]);
Double latitude = new Double(Double.parseDouble(coordinates[3]) * 1E6);
Double longitude = new Double(Double.parseDouble(coordinates[1]) * 1E6);
GeoPoint gp = new GeoPoint(latitude.intValue(), longitude.intValue());

Point point = new Point();
point = mv.getProjection().toPixels(gp, point);

x2 = point.x;
y2 = point.y;
if (i > 0) {
canvas.drawLine(x1, y1, x2, y2, paint);
}
x1 = x2;
y1 = y2;
}
}// while
}

最佳答案

尝试

public PolygonOverlay(ArrayList<KrollDict> polyLines){  
mPolyLines = (ArrayList<KrollDict>)polyLines.clone();
}

通过克隆,您应该可以安全地防止有人在您迭代列表时更改列表。

关于java - android: ConcurrentModificationException 与 map 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com