Layers: catch ArrayIndexOutOfBoundsException in updateLayers, #596
This commit is contained in:
parent
85c604c1ee
commit
292c092be3
@ -29,6 +29,8 @@ import org.oscim.layers.tile.ZoomLimiter;
|
||||
import org.oscim.map.Map.InputListener;
|
||||
import org.oscim.map.Map.UpdateListener;
|
||||
import org.oscim.renderer.LayerRenderer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.AbstractList;
|
||||
import java.util.ArrayList;
|
||||
@ -38,6 +40,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public final class Layers extends AbstractList<Layer> {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(Layers.class);
|
||||
|
||||
private final Map mMap;
|
||||
private final Layer.EnableHandler mEnableHandler;
|
||||
|
||||
@ -248,44 +252,48 @@ public final class Layers extends AbstractList<Layer> {
|
||||
}
|
||||
|
||||
private synchronized void updateLayers() {
|
||||
mLayers = new Layer[mLayerList.size()];
|
||||
int numRenderLayers = 0;
|
||||
try {
|
||||
mLayers = new Layer[mLayerList.size()];
|
||||
int numRenderLayers = 0;
|
||||
|
||||
for (int i = 0, n = mLayerList.size(); i < n; i++) {
|
||||
Layer o = mLayerList.get(i);
|
||||
for (int i = 0, n = mLayerList.size(); i < n; i++) {
|
||||
Layer o = mLayerList.get(i);
|
||||
|
||||
if (o.isEnabled() && o.getRenderer() != null)
|
||||
numRenderLayers++;
|
||||
if (o.isEnabled() && o.getRenderer() != null)
|
||||
numRenderLayers++;
|
||||
|
||||
if (o instanceof GroupLayer) {
|
||||
GroupLayer groupLayer = (GroupLayer) o;
|
||||
for (Layer gl : groupLayer.layers) {
|
||||
if (gl.isEnabled() && gl.getRenderer() != null)
|
||||
numRenderLayers++;
|
||||
if (o instanceof GroupLayer) {
|
||||
GroupLayer groupLayer = (GroupLayer) o;
|
||||
for (Layer gl : groupLayer.layers) {
|
||||
if (gl.isEnabled() && gl.getRenderer() != null)
|
||||
numRenderLayers++;
|
||||
}
|
||||
}
|
||||
|
||||
mLayers[n - i - 1] = o;
|
||||
}
|
||||
|
||||
mLayerRenderer = new LayerRenderer[numRenderLayers];
|
||||
|
||||
for (int i = 0, cnt = 0, n = mLayerList.size(); i < n; i++) {
|
||||
Layer o = mLayerList.get(i);
|
||||
LayerRenderer l = o.getRenderer();
|
||||
if (o.isEnabled() && l != null)
|
||||
mLayerRenderer[cnt++] = l;
|
||||
|
||||
if (o instanceof GroupLayer) {
|
||||
GroupLayer groupLayer = (GroupLayer) o;
|
||||
for (Layer gl : groupLayer.layers) {
|
||||
l = gl.getRenderer();
|
||||
if (gl.isEnabled() && l != null)
|
||||
mLayerRenderer[cnt++] = l;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mLayers[n - i - 1] = o;
|
||||
mDirtyLayers = false;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
mLayerRenderer = new LayerRenderer[numRenderLayers];
|
||||
|
||||
for (int i = 0, cnt = 0, n = mLayerList.size(); i < n; i++) {
|
||||
Layer o = mLayerList.get(i);
|
||||
LayerRenderer l = o.getRenderer();
|
||||
if (o.isEnabled() && l != null)
|
||||
mLayerRenderer[cnt++] = l;
|
||||
|
||||
if (o instanceof GroupLayer) {
|
||||
GroupLayer groupLayer = (GroupLayer) o;
|
||||
for (Layer gl : groupLayer.layers) {
|
||||
l = gl.getRenderer();
|
||||
if (gl.isEnabled() && l != null)
|
||||
mLayerRenderer[cnt++] = l;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mDirtyLayers = false;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user