JNI ОБНАРУЖИЛ ОШИБКУ В ПРИЛОЖЕНИИ: Нулевой указатель в Mapbox Android SDK

Я использовал mapbox sdk 6.3.0. Я могу добавить многоугольник на карту и разрешить пользователю перетаскивать его, изменив функцию, а затем обновив коллекцию функций следующим образом:

features.set(features.indexOf(oldFeature), newFeature);
symbolsSource.setGeoJson(symbolsCollection);

Все работало нормально.

Затем я попытался обновить SDK с 6.3.0 до 7.3.0. Затем внезапно при перетаскивании я получаю следующий сбой (прерывистый, но частый)

2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] JNI ОБНАРУЖИЛ ОШИБКУ В ПРИЛОЖЕНИИ: не удается вызвать java.lang.String com. mapbox.geojson.Feature.id() для нулевого объекта 2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] при вызове CallObjectMethodV 2019 -04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] "Thread-2368" prio=10 tid=65 Runnable 29.04.2019 17 :58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | group="main" sCount=0 dsCount=0 flags=0 obj=0x1b740000 self=0x763d1b6800 2019-04-29 17:58:03.119 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc :542] | sysTid=24204 nice=-10 cgrp=default sched=0/0 handle=0x76385da4f0 2019-04-29 17:58:03.120 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542 ] | state=R schedstat=( 1253639661 195250540 1454 ) utm=117 stm=8 core=7 HZ=100 2019-04-29 17:58:03.120 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext .cc:542] | stack=0x76384df000-0x76384e1000 stackSize=1009KB 2019-04-29 17:58:03.120 24115-24204/com.app.fr.dev A/stresponder.de: java_vm_ext.cc:542] | удерживаемые мьютексы = "блокировка мутатора" (общая удерживаемая)....

Нет журнала, который указывает на какую-либо точку в моем коде. Я надеюсь, что это может быть проблема с Mapbox SDK, потому что когда я вернусь к версии 6.3.0, она будет работать нормально. Я не могу точно определить фактическую проблему. Может ли кто-нибудь сказать мне, как на самом деле отладить такой сбой?

Пожалуйста, дайте мне знать, если я должен предоставить больше информации.

Заранее спасибо.

Изменить: это не дубликат nullpointer, потому что это не происходит с моим кодом. Это происходит внутри SDK Mapbox, как вы можете видеть из журнала. Также обратите внимание, что выданная ошибка является ошибкой JNI.


person hushed_voice    schedule 29.04.2019    source источник
comment
Я согласен, что это не дубликат NullPointer. Было несколько изменений в API между Mapbox Android Maps SDK 6.x и 7.x. Вероятно, вы видите этот NPE, потому что в вашем коде еще нужно внести некоторые изменения. Я рекомендую ознакомиться с руководством по миграции: github.com/mapbox/mapbox-gl-native/wiki/   -  person riastrad    schedule 17.05.2019
comment
@riastrad я внес необходимые изменения в руководство по миграции. Я поднял вопрос в репозитории github.   -  person hushed_voice    schedule 18.05.2019
comment
Это точно не дубликат. Тем не менее, 2 человека проголосовали за это, для повторного открытия требуется несколько голосов.   -  person Dima Rostopira    schedule 13.06.2019
comment
@DimaRostopira, если вы столкнулись с проблемой, mapbox предоставил решение здесь github.com/mapbox/mapbox-gl-native/issues/ для проблемы, которую я поднял. Они также исправили это в SDK, который будет выпущен через пару дней. Я надеюсь, что некоторые люди с достаточной репутацией проголосуют за повторное открытие этого   -  person hushed_voice    schedule 14.06.2019
comment
@free_style Я не сталкиваюсь с этой проблемой, я даже не использую mapbox. Попал сюда из очереди повторного просмотра голосов =) Я всегда осторожен с дублирующимися флагами. Кроме того, вы должны опубликовать этот комментарий в качестве ответа, часто полезно знать, что в самой lib была проблема.   -  person Dima Rostopira    schedule 14.06.2019


Ответы (1)


Я поднял проблему в Mapbox SDK, и они предложили мне обходной путь для этой проблемы.

Во время перетаскивания вместо того, чтобы устанавливать геоджсон напрямую, как это

symbolsSource.setGeoJson(symbolsCollection);

Мы должны установить это так:

symbolsSource.setGeoJson(FeatureCollection.fromFeatures(new ArrayList<>(symbolsCollection.features())));

Они также обновили SDK. Посмотрите здесь.

person hushed_voice    schedule 17.06.2019