MapBox SDK의 OfflineManager로지도를 다운로드하려고합니다. . 내 스타일은 assets 폴더에 있으며 온라인으로지도를 표시 할 때 잘 작동합니다. 그러나 같은 스타일로지도를 다운로드하려고하면 오류가 발생합니다. 내 스타일 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 객체 참조에