在使用 HBuilderX 开发 uni-app 项目时,集成高德地图模块是常见需求。然而,许多开发者在打包自定义调试基座后,调用地图定位或 uni.chooseLocation 时,会遇到页面下方搜索列表空白,并伴随控制台抛出 TypeError: Cannot read property 'pageIndex' of null 的致命错误。本文将为你梳理这一问题的核心诱因及标准解决方案。
[JS Framework] Failed to execute the callback function: TypeError: Cannot read property 'pageIndex' of null reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaScript execute error!Uncaught TypeError: Cannot read property 'pageIndex' of null at (/__uniappchooselocation.js.nvue:1:25432) [JS Framework] Failed to execute the callback function: TypeError: Cannot read property 'pageIndex' of null
一、 现象描述:地图加载了,但“芯”碎了
当你满心欢喜地点击定位选择时,手机端往往呈现出以下状态:地图底图可能正常显示,但下方的地址建议列表空空如也。紧接着,HBuilderX 控制台会疯狂刷出报错信息:
[JS Framework] Failed to execute the callback function: TypeError: Cannot read property 'pageIndex' of null at (__uniappchooselocation.js.nvue)
这个报错的本质原因并非代码逻辑写错了,而是高德地图 SDK 鉴权失败。由于鉴权未通过,SDK 返回的搜索结果对象为 null,导致内部处理分页的 pageIndex 属性无法读取。
二、 核心排查:高德 Key 的“三位一体”原则
要解决这个问题,必须确保高德开放平台后台、manifest.json 配置以及 HBuilderX 打包设置中的信息完全匹配。任何一个字符的偏差都会导致鉴权失败。
1. Android 平台的严苛校验
在高德开放平台控制台创建 Key 时,务必检查以下两点:
服务平台选择:必须勾选 Android 平台(很多同学误选了 Web 端或微服务)。
PackageName(包名):必须与 HBuilderX “App打包”弹窗中填写的 Android 包名 保持一致(例如 cn.a.app)。
SHA1 安全码:这是最容易出坑的地方。自定义调试基座使用的是你自己的证书,你需要从证书文件(.keystore 或 .jks)中提取 SHA1。如果是直接云端打包,则需对应云端证书的 SHA1。
2. iOS 平台的 Bundle ID 校验
对于 iOS 开发者,重点在于 Bundle ID。请确保高德后台配置的 Bundle ID 与 HBuilderX 中 manifest.json 里的 AppID 保持绝对一致。
三、 manifest.json 的模块配置
在项目的 manifest.json 视图中,确保在“App模块配置”中勾选了 Maps(地图),并正确填写了申请到的 AppKey:
appkey_ios:填写高德对应的 iOS Key。
appkey_android:填写高德对应的 Android Key。
注意:修改完 manifest.json 后,必须重新制作自定义调试基座,仅仅保存并点击运行是无法生效的。
四、 为什么自定义基座会报错,而标准基座运行正常?
这是一个常见的误区。当你使用 HBuilderX 默认的标准基座运行时,使用的是 DCloud 官方的测试 Key。而当你制作自定义调试基座时,App 的包名、证书、模块都变成了你自己的配置。此时,如果高德后台的 Key 没配对,或者 SHA1 提取错误,就会立即触发上述报错。
五、 总结与自查清单
如果你依然面对空白的定位页面,请按照以下流程闭眼排查:
检查包名:高德后台配置 = manifest.json 里的包名 = 打包界面填写的包名。
检查证书 SHA1:使用 keytool 命令重新查看证书文件,确保复制到高德后台的 SHA1 没有多余空格或字符,或者省略冒号。
重做基座:任何 Key 的变动,都要通过“发行 -> 原生App-云打包 -> 制作自定义调试基座”重新走一遍。
确认模块:在 manifest.json 的 SDK 配置中,定位和地图是否都指向了高德,而非百度或腾讯。
修复完这些配置后,重新运行自定义基座,你会发现那个恼人的 pageIndex of null 报错消失了,定位列表也将恢复正常显示。








还没有评论,来说两句吧...