mapbox.getStyle () возвращает ноль при изменении типа карты - PullRequest
0 голосов
/ 20 февраля 2020

У меня проблема с mapbox при быстром изменении строки mapStyle с Style.MAPBOX_STREETS на Style.SATELLITE_STREETS (и наоборот). (Это происходит и с другими стилями, это всего лишь примеры)

Мой код:

public void btnChangeMapType(View view) {
    this.mapboxMap.getStyle(style -> {
        String styleUri = this.mapboxMap.getStyle().getUri();
        if (this.animator != null)
            this.animator.cancel();

        if (styleUri.equalsIgnoreCase(SATELLITE_STREETS)) {
            changeMapType(Style.MAPBOX_STREETS, this.mapboxMap.getStyle());
        } else {
            changeMapType(Style.SATELLITE_STREETS, this.mapboxMap.getStyle());
        }
    });
}
private void changeMapType(String mapboxMapType, Style mapboxStyle) {
    this.mapboxMap.setStyle(mapboxMapType, style -> {
        if (this.previousLocation != null) {
            this.positionGeoJson = new GeoJsonSource(MAP_LAYER_SOURCE_ID, Feature.fromGeometry(Point.fromLngLat(this.previousLocation.getLongitude(), this.previousLocation.getLatitude())));
        } else {
            this.positionGeoJson = getNewGeoJsonPosition();
        }

        if (this.hasFocus && this.animator != null) {
            drawDrivenLine();
            this.animator.start();
        }
    });
}

И если я нажму на кнопку, которая вызывает btnChangeMapType быстро несколько раз я получаю сообщение об ошибке в строке String styleUri = this.mapboxMap.getStyle (). GetUri (); в btnChangeMapType ()

Журнал ошибок:

2020-02-20 11:31:50.828 14916-14916/at.myprojects.project E/Mbgl-MapChangeReceiver: Exception in onDidFinishLoadingStyle
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.mapbox.mapboxsdk.maps.Style.getUri()' on a null object reference

Есть ли способ предотвратить сбой моего приложения / возникновение этой ошибки?

1 Ответ

0 голосов
/ 20 февраля 2020

В String styleUri = this.mapboxMap.getStyle().getUri(); getStyle() не требуется, потому что вы уже находитесь в блоке getStyle(), который возвращает объект Style над этой строкой (style -> {). Так что вместо этого будет String styleUri = style.getUri();. Я думаю, что это решит сообщение NullPointerException.

Кроме того, похоже, что вы нигде не используете параметр Style mapboxStyle, поэтому вы можете удалить его из changeMapType().

...