uni-app uni.getStorageSync获取不到数据

uni-app uni.getStorageSync获取不到数据

操作步骤

先加载add,点击按钮后打开drawroute,绘制完成后与点击完成按钮调用uni.setStorageSync储存数据,然后点击返回按钮回到上一页,在上一页的onshow里调用uni.getStorageSync,获取不到数据

预期结果

能够获取到数据

实际结果

无法获取,找不到数据

bug描述

先加载add,点击按钮后打开drawroute,绘制完成后与点击完成按钮调用uni.setStorageSync储存数据,然后点击返回按钮回到上一页,在上一页的onshow里调用uni.getStorageSync,获取不到数据

img img img

开发环境信息

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 11
HBuilderX类型 正式
HBuilderX版本号 4.45
手机系统 Android
手机系统版本号 Android 10
手机厂商 vivo
手机机型 S7
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app uni.getStorageSync获取不到数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

16 回复

我刚试了下,用官方demo没发现问题 你可以新建个项目,用官方demo里试试,看好使不

更多关于uni-app uni.getStorageSync获取不到数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我是在renderjs里回调server层的函数进行存储,名字,存储我都验证过 没问题,就找不到原因

我在其他地方使用都没问题 只有这一个地方取不到数据

回复 2***@qq.com: 你在存的地打个日志,看key 跟value都有值么,存完后立马再取你看看有不

回复 套马杆的套子: 有值的

回复 2***@qq.com: 我看你unload的时候是有清么?看看界面里哪有清的,然后新界面别在onshow里取,或者延期点时间再取试试呢,

回复 套马杆的套子: 只有这一个地方有清,调用uni.navigateBack之后就取不到了

回复 套马杆的套子: uni.navigateBack({ success: () => { // 回退成功后执行的代码 let routedata = uni.getStorageSync(“routeDetail”); console.log(“drawroute.vue保存航迹取值Back”, routedata) } });

回复 2***@qq.com: 换成uni.navigateTo试试呢

回复 套马杆的套子: 可以获取

回复 套马杆的套子: 那uni.navigateBack为什么就获取不到了呢?

回复 2***@qq.com: 还是因为你的onUnload里的问题,,因为navigateTo是不触发onUnload的,navigateBack会触发。所以问题就在onUnload里了

回复 套马杆的套子: onload里的清除是上一页的,不是调用navigateBack的页面的,而且我之前试了屏蔽清除代码,也不行

回复 套马杆的套子: 我将所有的uni.clearStorageSync全都屏蔽掉,然后就可以读取了,但是有的key是别的值,跟这个并不相同,为什么会有影响?

回复 套马杆的套子: 我又试了,确实是onload里代码的影响,但是onload里的key和无法获取到的数据的key不是同一个

uni-app 中,如果你发现 uni.getStorageSync 无法获取到数据,这通常可能由几个原因引起,包括数据未正确存储、存储键名有误、存储的数据类型不兼容或者存储操作在异步环境中未完成等。以下是一些排查和解决问题的代码示例,帮助你确保数据能够被正确存储和读取。

1. 确保数据已正确存储

首先,确保你在某个地方已经使用了 uni.setStorageSync 方法存储了数据。例如:

// 存储数据
uni.setStorageSync('myKey', 'myValue');

2. 检查存储和读取的键名是否一致

确保你存储数据时使用的键名与读取数据时使用的键名完全一致。键名是区分大小写的。

// 存储数据
uni.setStorageSync('myKey', 'myValue');

// 读取数据
const value = uni.getStorageSync('myKey');
console.log(value); // 应该输出 'myValue'

3. 处理存储的数据类型

如果你存储的是复杂数据类型(如对象、数组),确保在读取时正确处理这些数据。

// 存储对象
const obj = { name: '张三', age: 30 };
uni.setStorageSync('userInfo', obj);

// 读取对象
const userInfo = uni.getStorageSync('userInfo');
console.log(userInfo); // 应该输出 { name: '张三', age: 30 }

4. 异步存储和同步读取的注意事项

如果你是在异步操作中存储数据(例如,在网络请求后存储响应数据),确保存储操作完成后再进行读取。虽然 uni.setStorageSync 是同步的,但如果你之前使用了 uni.setStorage(异步版本),则需要等待其完成。

// 异步存储示例(通常不推荐与 sync 方法混用)
uni.setStorage({
    key: 'asyncKey',
    data: 'asyncValue',
    success: function () {
        // 存储成功后读取
        const asyncValue = uni.getStorageSync('asyncKey');
        console.log(asyncValue); // 应该输出 'asyncValue'
    }
});

5. 调试技巧

如果以上步骤都确认无误,但问题依旧存在,可以尝试清除存储后重新存储数据,或者检查是否有其他地方(如其他页面或组件)修改了存储的内容。

// 清除存储
uni.removeStorageSync('myKey');

// 重新存储并读取
uni.setStorageSync('myKey', 'newValue');
const newValue = uni.getStorageSync('myKey');
console.log(newValue); // 应该输出 'newValue'

通过上述步骤,你应该能够定位并解决 uni.getStorageSync 无法获取数据的问题。如果问题依然存在,请检查控制台是否有错误信息,或者进一步检查代码逻辑。

回到顶部