uni-app中uni.getStorageInfoSync().keys获取到空数组

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app中uni.getStorageInfoSync().keys获取到空数组

uni.getStorageInfoSync().keys获取到空数组,不确定是过大还是什么问题,一段时间后获取变[]

4 回复

提供下 vue 和HBuilderX 版本,keys 返回值是始终为空数组,还是做了操作后变成空数组,其他平台、系统是否正常


vue2写的安卓app应用,HBuilderX4.36,一开始是能正常返回的,但储存大量数据后过一段时间就不能读取回来了,getStorage和setStorage是可以继续操作的,就是uni.getStorageInfoSync().keys为空数组(plus.storage.getAllKeys()也一样),也不报错,try没捕获到异常

回复 jahem: 有两个隐患一个是 storage 不能存储大量数据,不安全不可靠。你是说存储大量数据之后 sync 不行,但是异步的 getStorage 正常吗,做一个 demo 吧

在uni-app中,uni.getStorageInfoSync().keys 用于同步获取当前存储中的所有键名。如果你遇到了获取到空数组的情况,这通常意味着当前存储(localStorage)中没有保存任何数据。不过,也有可能是代码逻辑或存储操作有误导致的。下面是一些检查和调试的步骤,以及相关的代码示例。

检查步骤

  1. 确保存储数据: 确保在调用 uni.getStorageInfoSync().keys 之前,已经有数据被存储到 localStorage 中。

  2. 使用正确的存储方法: 使用 uni.setStorageSyncuni.setStorage 来存储数据。

  3. 检查存储权限: 虽然uni-app通常不需要额外的存储权限,但在某些平台上(如小程序),需要注意是否有存储限制。

代码示例

存储数据

// 存储一些数据到 localStorage
uni.setStorageSync('key1', 'value1');
uni.setStorageSync('key2', 'value2');

获取存储信息

// 获取存储信息
const storageInfo = uni.getStorageInfoSync();
console.log('存储信息:', storageInfo);

// 获取所有键名
const keys = storageInfo.keys;
console.log('存储的键名:', keys);

完整示例

// 存储数据
uni.setStorageSync('user', { name: '张三', age: 30 });
uni.setStorageSync('token', '123456abcdef');

// 延时模拟异步操作(实际开发中可能不需要)
setTimeout(() => {
    // 获取存储信息
    const storageInfo = uni.getStorageInfoSync();
    console.log('存储信息:', storageInfo);

    // 获取所有键名
    const keys = storageInfo.keys;
    if (keys.length === 0) {
        console.warn('没有存储任何键名');
    } else {
        console.log('存储的键名:', keys);
    }

    // 检查特定键是否存在
    if (keys.includes('user')) {
        console.log('键 "user" 存在');
        const user = uni.getStorageSync('user');
        console.log('键 "user" 对应的值:', user);
    } else {
        console.warn('键 "user" 不存在');
    }
}, 1000); // 延时1秒执行

注意事项

  • 确保在调用 uni.getStorageInfoSync().keys 之前数据已经被正确存储。
  • 如果是在页面加载时立即调用,可能需要确保存储操作已经完成(例如,通过页面生命周期函数或异步回调)。
  • 使用 console.log 或调试工具来跟踪存储和检索操作的状态,有助于诊断问题。

通过上述步骤和代码示例,你应该能够诊断并解决 uni.getStorageInfoSync().keys 返回空数组的问题。

回到顶部