uni-app 调用uni.chooseLocation报错 TypeError: Cannot read property 'pageIndex' of null

发布于 1周前 作者 yibo5220 来自 uni-app

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
打包方式 云端

13 回复

没有复现。另外这就是一个普通前端页面,放个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.');
    }
});

在上面的代码中,我们首先检查 resres.address 是否存在,然后再访问其属性。这样可以防止因为 resres.address 为 null 而导致的错误。此外,我们还在 .then 方法中展示了如何在异步操作完成后安全地访问可能未定义的变量 locationData

确保在实际项目中,对所有可能来自异步操作或外部输入的数据进行类似的检查,是防止运行时错误的重要实践。

回到顶部