uni-app uni.getStorageSync获取不到数据
uni-app uni.getStorageSync获取不到数据
操作步骤
先加载add,点击按钮后打开drawroute,绘制完成后与点击完成按钮调用uni.setStorageSync储存数据,然后点击返回按钮回到上一页,在上一页的onshow里调用uni.getStorageSync,获取不到数据
预期结果
能够获取到数据
实际结果
无法获取,找不到数据
bug描述
先加载add,点击按钮后打开drawroute,绘制完成后与点击完成按钮调用uni.setStorageSync储存数据,然后点击返回按钮回到上一页,在上一页的onshow里调用uni.getStorageSync,获取不到数据
开发环境信息
项目 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 11 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.45 |
手机系统 | Android |
手机系统版本号 | Android 10 |
手机厂商 | vivo |
手机机型 | S7 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
我刚试了下,用官方demo没发现问题
你可以新建个项目,用官方demo里试试,看好使不
我在其他地方使用都没问题 只有这一个地方取不到数据
回复 2***@qq.com: 你在存的地打个日志,看key 跟value都有值么,存完后立马再取你看看有不
回复 套马杆的套子: 有值的
回复 套马杆的套子: 只有这一个地方有清,调用uni.navigateBack之后就取不到了
回复 套马杆的套子: uni.navigateBack({ success: () => { // 回退成功后执行的代码 let routedata = uni.getStorageSync(“routeDetail”); console.log(“drawroute.vue保存航迹取值Back”, routedata) } });
回复 2***@qq.com: 换成uni.navigateTo试试呢
回复 套马杆的套子: 可以获取
回复 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
无法获取数据的问题。如果问题依然存在,请检查控制台是否有错误信息,或者进一步检查代码逻辑。