uni-app 调用uni.chooseLocation报错 TypeError: Cannot read property 'pageIndex' of null
uni-app 调用uni.chooseLocation报错 TypeError: Cannot read property ‘pageIndex’ of null
操作步骤
运行到自定义基座显示位置列表
预期结果
目前打开,不显示位置列表,还报错,配置的是高德地图的key,定位可以获取到,就这个选择位置页面会报错
实际结果
目前打开,不显示位置列表,还报错,配置的是高德地图的key,定位可以获取到,就这个选择位置页面会报错
bug描述
之前还好好的,突然就报错,不知道什么原因
[JS Framework] Failed to execute the callback function:
TypeError: Cannot read property ‘pageIndex’ of null
19:39:56.219 reportJSException >>> exception function:WEEX_CALL_JAVASCRIPT, exception:JavaScript execute error!Uncaught TypeError: Cannot read property ‘pageIndex’ of null
at (/__uniappchooselocation.js.nvue:1:25432)
开发环境与版本信息
项目创建方式 | HBuilderX |
---|---|
PC开发环境操作系统 | Windows |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | Android |
手机系统版本号 | Android 12 |
手机厂商 | 华为 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
没有复现。另外这就是一个普通前端页面,放个map组件,搜索周围poi,自己也可以做一个页面,插件市场也有很多类似页面。
这个不是uniapp uni.chooseLocation自己会打开自带的地图页面吗。我尝试过不同的key,进到这个页面都会报这个错
我查看了我好几个版本之前的apk,里面的uni.chooseLocation也是没有列表,但是之前是可以看见的,代表没有这个问题,希望你们可以排查一下这个问题,谢谢
回复 4***@qq.com: 请问有解决吗
我也是这个问题
我sha1用了去掉冒号的,换成带冒号的好了。
问题有没解决同样的问题
问题有没解决同样的问题
我也是这样,更新了HBuilderX之后,重新打包和制作自定义基座后就这样了,我换了其他人未更新的基座就可以用,但是uni.share用不了,一直提示我打包时没有share,我明明勾选了的,我更新了HBuilderX之后制作自定义基座,uni.share可以用了,但是uni.chooseLocation用不了了
回复 1***@qq.com: 欧多剋,怎么办
同样的问题,怎么解决呢
有没有人解决好
在使用 uni-app 开发应用时,遇到 TypeError: Cannot read property 'pageIndex' of null
这类错误通常意味着你尝试访问了一个 null 对象的属性。在调用 uni.chooseLocation
API 的上下文中,这个错误可能不是直接由 uni.chooseLocation
本身引起的,而是由于处理返回结果或相关逻辑时,对某个预期为对象的变量进行了不安全的访问。
为了解决这个问题,我们需要确保在访问任何对象属性之前,该对象不是 null。下面是一个示例代码,展示了如何安全地调用 uni.chooseLocation
并处理返回结果,避免类似的错误:
// 调用uni.chooseLocation并处理结果
uni.chooseLocation({
success: (res) => {
// 检查返回结果是否为null或undefined
if (res && res.address) {
// 安全访问res.address对象及其属性
console.log('Location selected:', res.address);
console.log('Name:', res.address.name);
console.log('Latitude:', res.address.latitude);
console.log('Longitude:', res.address.longitude);
} else {
console.error('Invalid location response:', res);
}
},
fail: (err) => {
// 处理失败情况
console.error('Failed to choose location:', err);
},
complete: () => {
// 完成回调,无论成功或失败都会执行
console.log('Location choosing process completed.');
}
});
// 示例:避免在回调外部直接访问可能未定义的变量
// 假设有一个可能由chooseLocation设置的变量locationData
let locationData = null;
// 在success回调中安全设置locationData
uni.chooseLocation({
success: (res) => {
if (res && res.address) {
locationData = res.address; // 安全设置
}
},
// ... 其他回调处理 ...
}).then(() => {
// 在.then中访问locationData前进行检查
if (locationData) {
console.log('Safe access to locationData:', locationData.name);
} else {
console.warn('locationData is not set.');
}
});
在上面的代码中,我们首先检查 res
和 res.address
是否存在,然后再访问其属性。这样可以防止因为 res
或 res.address
为 null 而导致的错误。此外,我们还在 .then
方法中展示了如何在异步操作完成后安全地访问可能未定义的变量 locationData
。
确保在实际项目中,对所有可能来自异步操作或外部输入的数据进行类似的检查,是防止运行时错误的重要实践。