MapBox:由于永久性错误导致请求失败:尝试调用虚方法' java.lang.String okhttp3.HttpUrl.host()'在null对象引用上

时间:2017-10-04 12:33:12

标签: android mapbox mapbox-gl

我尝试使用MapBox SDK的OfflineManager下载地图。我的样式位于资源文件夹中,在线显示地图时工作正常。但是当我尝试下载具有相同风格的地图时,我得到了那个错误。我的样式JSON文件位于assets文件夹中可能是个问题吗?它应该放在别的地方吗?

 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()'在空对象引用上

1 个答案:

答案 0 :(得分:1)

经过长时间的研究终于找到了解决方案。在此处找到解决方案:https://github.com/mapbox/mapbox-gl-native/issues/5271