MapBox SDKのOfflineManagerでマップをダウンロードしようとしています。私のスタイルはアセットフォルダにあり、オンラインで地図を表示するときにうまく機能します。しかし、同じスタイルのマップをダウンロードしようとすると、そのエラーが発生します。私のスタイルのJSONファイルがassetsフォルダに置かれているのはおそらく問題でしょうか?別の場所に置くべきでしょうか? W/HTTPRequestの:永続的なエラーが原因で失敗した要求:「はjava.lang.String型okhttp3.HttpUrl.hostを仮想メソッドを呼び出そうと(ここで MapBox:永続的なエラーのため要求が失敗しました:nullオブジェクト参照で仮想メソッド 'java.lang.String okhttp3.HttpUrl.host()'を呼び出そうとしました
mapView.onCreate(savedInstanceState);
mapView.setStyleUrl("asset://kompassStyle");
mapView.getMapAsync(mapboxMap -> {
startDownload(mapboxMap);
});
private void startDownload(MapboxMap mapboxMap) {
byte[] metadata;
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("region", "Some region");
String json = jsonObject.toString();
metadata = json.getBytes(JSON_CHARSET);
} catch (Exception exception) {
Log.e("Offline", "Failed to encode metadata: " + exception.getMessage());
metadata = null;
}
if (metadata == null)
return;
Timber.e("Style " + mapboxMap.getStyleUrl());
OfflineManager offlineManager = OfflineManager.getInstance(getContext());
LatLngBounds latLngBounds = new LatLngBounds.Builder()
.include(new LatLng(45.8150, 15.9819)) // Northeast
.include(new LatLng(41.9028, 12.4964)) // Southwest
.build();
OfflineTilePyramidRegionDefinition definition = new OfflineTilePyramidRegionDefinition(
mapboxMap.getStyleUrl(),
latLngBounds,
5,
10,
getContext().getResources().getDisplayMetrics().density);
offlineManager.createOfflineRegion(definition, metadata, new OfflineManager.CreateOfflineRegionCallback() {
@Override
public void onCreate(OfflineRegion offlineRegion) {
offlineRegion.setDownloadState(OfflineRegion.STATE_ACTIVE);
offlineRegion.setObserver(new OfflineRegion.OfflineRegionObserver() {
@Override
public void onStatusChanged(OfflineRegionStatus status) {
double percentage = status.getRequiredResourceCount() >= 0
? (100.0 * status.getCompletedResourceCount()/status.getRequiredResourceCount()) :
0.0;
if (status.isComplete()) {
// Download complete
Log.d("offline", "Region downloaded successfully.");
} else if (status.isRequiredResourceCountPrecise()) {
Log.d("offline", " " + percentage);
}
}
@Override
public void onError(OfflineRegionError error) {
Timber.e(error.getMessage());
Timber.e(error.getReason());
}
@Override
public void mapboxTileCountLimitExceeded(long limit) {
Timber.e("LimitOffline " + limit);
}
});
}
@Override
public void onError(String error) {
Timber.e(error);
}
});
}
は私のkompassStyle
{
"version": 8,
"name": "Raster Tiles",
"sources": {
"yourTileLayer": {
"type": "raster",
"tiles": [
"http://xxxxxx/{z}/{x}/{y}.jpg?key=something",
"http://yyyyyy/{z}/{x}/{y}.jpg?key=something",
"http://ssssss/{z}/{x}/{y}.jpg?key=something",
"http://nnnnnn/{z}/{x}/{y}.jpg?key=something"
],
"tileSize": 256
}
},
"layers": [
{
"id": "background",
"type": "background",
"paint": {
"background-color": "#41afa5"
}
},
{
"id": "yourTileLayer",
"type": "raster",
"source": "yourTileLayer"
}]
}
エラーログです) 'nullのオブジェクト参照で