mapbox.getStyle() returns 更改地图类型时为空
mapbox.getStyle() returns null when changing maptype
当我连续快速将 mapStyle 从 Style.MAPBOX_STREETS 更改为 Style.SATELLITE_STREETS(反之亦然)时,我遇到了 mapbox 问题。 (其他样式也会发生这种情况,这些只是示例)
我的代码:
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 的按钮,我会在第 行收到错误消息=25=]String styleUri = this.mapboxMap.getStyle().getUri(); in 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
有没有办法让我的应用避免 crashing/having 这个错误?
在 String styleUri = this.mapboxMap.getStyle().getUri();
中,不需要 getStyle()
因为您已经在 getStyle()
块中 returns 一个 Style
对象在该行上方(style -> {
)。所以应该是 String styleUri = style.getUri();
。我认为这将解决 NullPointerException
消息。
此外,您似乎没有在任何地方使用 Style mapboxStyle
参数,因此您可以将其从 changeMapType()
.
中删除
当我连续快速将 mapStyle 从 Style.MAPBOX_STREETS 更改为 Style.SATELLITE_STREETS(反之亦然)时,我遇到了 mapbox 问题。 (其他样式也会发生这种情况,这些只是示例)
我的代码:
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 的按钮,我会在第 行收到错误消息=25=]String styleUri = this.mapboxMap.getStyle().getUri(); in 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
有没有办法让我的应用避免 crashing/having 这个错误?
在 String styleUri = this.mapboxMap.getStyle().getUri();
中,不需要 getStyle()
因为您已经在 getStyle()
块中 returns 一个 Style
对象在该行上方(style -> {
)。所以应该是 String styleUri = style.getUri();
。我认为这将解决 NullPointerException
消息。
此外,您似乎没有在任何地方使用 Style mapboxStyle
参数,因此您可以将其从 changeMapType()
.