2017-10-04 87 views
0

我试图用OfflineManager的MapBox SDK下载地图。我的风格位于资产文件夹中,在线显示地图时效果很好。但是,当我尝试以相同样式下载地图时,我得到了该错误。这可能是我的样式JSON文件位于资产文件夹中的问题吗?它应该把它放在别的地方吗?MapBox:由于永久性错误导致请求失败:尝试在空对象引用上调用虚拟方法'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" 
    }] 
} 

错误日志中:W /的HTTPRequest:请求失败由于永久性错误:试图调用虚拟方法java.lang.String中okhttp3.HttpUrl.host( )'上的空对象引用

回答

相关问题