You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Here Maps Android SDK离线导航:下载地图后无法算路,重启才正常

Here Maps Android SDK离线导航下载地图后无法立即算路的问题解决

问题描述

使用Here Maps Android SDK(Navigate Edition)实现离线导航时,成功下载地图数据后调用OfflineRoutingEngine计算路线,出现如下错误:

E/routing-offline: [ERROR] routing-offline - Failed to calculate the route description, error code: 11, routing error: 1

重启应用后可正常算路,且调用mapDownloader.getInstalledRegions()已确认对应区域状态为Installed:

I/CacheUpdateManager: [INFO ] CacheUpdateManager - GetInstalledMapRegions: catalog_handle=0, regions=[{region_id=20127658, status=Installed}]

问题原因

错误码11对应Here SDK的路由数据未就绪状态。mapDownloader.getInstalledRegions()仅能确认地图包已下载完成,但SDK在下载完成后需要后台完成离线路由数据的索引构建、缓存初始化等操作,此时路由引擎尚未完成数据加载,直接发起算路请求就会失败。

解决方案

  1. 监听离线路由引擎的就绪状态
    不要直接同步初始化OfflineRoutingEngine,改用异步方式获取实例并监听初始化完成事件:

    OfflineRoutingEngine.getInstanceAsync(new EngineInitCallback<OfflineRoutingEngine>() {
        @Override
        public void onEngineInitializationCompleted(OfflineRoutingEngine engine, Error error) {
            if (error == null) {
                // 引擎初始化完成,可在此发起路由计算请求
                calculateRoute(engine);
            } else {
                // 处理初始化失败逻辑
            }
        }
    });
    
  2. 监听地图数据的就绪状态
    通过MapLoader注册数据就绪监听器,确保离线地图数据完全加载后再执行路由操作:

    MapLoader mapLoader = MapLoader.getInstance();
    mapLoader.addMapDataReadyListener(new MapDataReadyListener() {
        @Override
        public void onMapDataReady() {
            // 地图数据就绪,初始化路由引擎并算路
            initOfflineRoutingEngine();
        }
    
        @Override
        public void onMapDataFailed(Error error) {
            // 处理数据加载失败逻辑
        }
    });
    
  3. 临时规避方案(不推荐长期使用)
    若暂时无法接入监听机制,可在下载完成后延迟1-2秒再发起路由请求,给SDK留出数据初始化的时间。

内容的提问来源于stack exchange,提问作者user10986164

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:02:00