2017-10-04 8 views
0

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 객체 참조에

답변