uni-app 退出重启后 getStorageSync 获取不到值
uni-app 退出重启后 getStorageSync 获取不到值
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | macOS big sur(11) | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:macOS big sur(11)
HBuilderX类型:正式
HBuilderX版本号:3.1.1
手机系统:全部
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
测试过的手机:Android手机
示例代码:
/**
* @description 存储本地数据
* @param {Object} key
* @param {Object} value
*/
setStorage(key,value){
try {
uni.setStorageSync(key, JSON.stringify(value || {}));
} catch (e) {
uni.setStorageSync(key, null);
}
},
/**
* @description 获取本地数据
* @param {Object} key
*/
getStorage(key){
try {
let value = uni.getStorageSync(key) || {};
if (value) {
return JSON.parse(value);
}
} catch (e) {
return null;
}
},
操作步骤:
使用uni.getStorageSync获取缓存数据
预期结果:
可以获取数据
实际结果:
偶发性获取不到
bug描述:
业务逻辑: 把登录成功后的用户信息存入缓存,关闭App,下次启动检测是否存在此缓存。
但是Android手机是偶发性获取不到。仔细检查的确没有清空缓存的操作,要是清空的话,每次启动都得不到,而现在是偶发性的。已经有3个客户反映出现此问题了。(正式的发行包)
真机运行自定义基座时,uni.getStorageSync读取已经登录并存储了用户信息,也是偶发性获取不到。但是比正式发行包几率要高些。
目前是实在找不到确切的问题在那里,故无法提供demo。但的确出现使用uni.setStorageSync获取不到缓存信息的问题!
tips:之前项目时mui 5+App项目使用的是localStorage存储的,客户反映良好。(uni.setStorageSync在App端应该对应的是plus.storage.setItem),不知道为什么会是这样
更多关于uni-app 退出重启后 getStorageSync 获取不到值的实战教程也可以访问 https://www.itying.com/category-93-b0.html
9 回复
该问题仍然存在,我已反馈至你们iOS技术:FlowerRain,请尽快修复!
更多关于uni-app 退出重启后 getStorageSync 获取不到值的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2023年7月18日16:34:29
IQOO手机,依旧问题存在。偶发性的获取不到配置地址。
出现问题的机型信息补充一下
iOS模拟器 - iPhone 14 Pro - iOS14.6 上也存在类似问题,热重载的时候能获取到数据,但是每次重新运行项目就获取不到缓存,缓存消失了。
这个问题在红米k50机型上依然存在,红米手机完全获取不到存储后的值,存储的值只能当前页面存取,跨页面获取不到内容
之前我也是遇到了这个问题,使用 uni.getStorageSync 获取不到数据 ,然后用其他方式搞定了,最开始还以为是其他BUG
怎么解决的,可以借鉴一下吗大佬
小米14也会这样
这是一个典型的uni-app存储数据丢失问题,主要可能由以下几个原因导致:
- 存储时机问题:
- 在App启动时过早调用getStorageSync可能导致读取失败
- 建议在onLaunch生命周期后再读取存储
- Android平台特性:
- Android系统可能在内存不足时自动清理存储
- 部分厂商ROM会限制后台应用的存储访问
- 序列化问题:
- 你的代码中对空值处理不够严谨
- 建议修改getStorage方法为:
getStorage(key){
try {
const value = uni.getStorageSync(key);
return value ? JSON.parse(value) : null;
} catch (e) {
return null;
}
}