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.InputListener;
|
||||||
import org.oscim.map.Map.UpdateListener;
|
import org.oscim.map.Map.UpdateListener;
|
||||||
import org.oscim.renderer.LayerRenderer;
|
import org.oscim.renderer.LayerRenderer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.AbstractList;
|
import java.util.AbstractList;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -38,6 +40,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
|||||||
|
|
||||||
public final class Layers extends AbstractList<Layer> {
|
public final class Layers extends AbstractList<Layer> {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(Layers.class);
|
||||||
|
|
||||||
private final Map mMap;
|
private final Map mMap;
|
||||||
private final Layer.EnableHandler mEnableHandler;
|
private final Layer.EnableHandler mEnableHandler;
|
||||||
|
|
||||||
@ -248,44 +252,48 @@ public final class Layers extends AbstractList<Layer> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void updateLayers() {
|
private synchronized void updateLayers() {
|
||||||
mLayers = new Layer[mLayerList.size()];
|
try {
|
||||||
int numRenderLayers = 0;
|
mLayers = new Layer[mLayerList.size()];
|
||||||
|
int numRenderLayers = 0;
|
||||||
|
|
||||||
for (int i = 0, n = mLayerList.size(); i < n; i++) {
|
for (int i = 0, n = mLayerList.size(); i < n; i++) {
|
||||||
Layer o = mLayerList.get(i);
|
Layer o = mLayerList.get(i);
|
||||||
|
|
||||||
if (o.isEnabled() && o.getRenderer() != null)
|
if (o.isEnabled() && o.getRenderer() != null)
|
||||||
numRenderLayers++;
|
numRenderLayers++;
|
||||||
|
|
||||||
if (o instanceof GroupLayer) {
|
if (o instanceof GroupLayer) {
|
||||||
GroupLayer groupLayer = (GroupLayer) o;
|
GroupLayer groupLayer = (GroupLayer) o;
|
||||||
for (Layer gl : groupLayer.layers) {
|
for (Layer gl : groupLayer.layers) {
|
||||||
if (gl.isEnabled() && gl.getRenderer() != null)
|
if (gl.isEnabled() && gl.getRenderer() != null)
|
||||||
numRenderLayers++;
|
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