nextgis / android_gisapp

:dart: GIS application for Android
http://nextgis.com/nextgis-mobile
GNU General Public License v3.0
134 stars 107 forks source link

Падение при загрузке GeoJSON #429

Open BishopGIS opened 8 years ago

BishopGIS commented 8 years ago

Падение при чтении geojson

java.lang.OutOfMemoryError
    at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124)
    at java.lang.StringBuilder.append(StringBuilder.java:271)
    at android.util.JsonReader.nextString(JsonReader.java:907)
    at android.util.JsonReader.nextValue(JsonReader.java:705)
    at android.util.JsonReader.objectValue(JsonReader.java:688)
    at android.util.JsonReader.peek(JsonReader.java:347)
    at android.util.JsonReader.nextString(JsonReader.java:406)
    at com.nextgis.maplib.util.NGWUtil.readNGWFeature(NGWUtil.java:389)
    at com.nextgis.maplib.map.NGWVectorLayer.createFromNGW(NGWVectorLayer.java:494)
    at com.nextgis.maplibui.service.LayerFillService$NGWVectorLayerFillTask.execute(LayerFillService.java:636)
    at com.nextgis.maplibui.service.LayerFillService$2.run(LayerFillService.java:248)
    at java.lang.Thread.run(Thread.java:856)

4.1.2 (16) памяти на устройстве 1Гб

30 Мб памяти аллоцирования - это очень много.

00:01 D/nextgismobile: download features from: http://maxim.nextgis.com/api/resource/118/feature/
00:01 E/dalvikvm-heap: Out of memory on a 30484546-byte allocation.
4eRTuk commented 8 years ago

Не знаю, как быстро решить эту проблему. Нужно думать над форматом передачи данных - JsonReader не может загрузить такую большую геометрию.

BishopGIS commented 8 years ago

Тут нужно потоковый парсер геометрии уже делать. https://github.com/nextgis/android_maplib/blob/master/src/main/java/com/nextgis/maplib/util/NGWUtil.java#L389 Хотя вот это видимо (nextgis/nextgisweb#475) более простое решение.

Пока надо добавить throws OutOfMemoryError вот сюда https://github.com/nextgis/android_maplib/blob/master/src/main/java/com/nextgis/maplib/util/NGWUtil.java#L379, что бы не падала программа.

Но тикет не закрывай. Я его на 3 версию переназначил.