uni-app 4.31 uni.setStorageSync() 方法在鸿蒙系统上保存数组后读取变为对象

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

uni-app 4.31 uni.setStorageSync() 方法在鸿蒙系统上保存数组后读取变为对象

信息类别 详情
产品分类 uniapp/App
PC开发环境 Windows
手机系统 HarmonyOS NEXT
手机厂商 华为
手机机型 Mate 60
页面类型 vue
vue版本 vue3
打包方式 离线
项目创建方式 CLI
CLI版本号 3.0.0-alpha-4030120241024002

示例代码:

uni.setStorageSync('key', [{"note":"男","id":"1","cbm":"1"},{"note":"女","id":"2","cbm":"2"}])  

uni.getStorageSync('key')  

// 输出 {"0":{"note":"男","id":"1","cbm":"1"},"1":{"note":"女","id":"2","cbm":"2"}}

操作步骤:

uni.setStorageSync('key', [{"note":"男","id":"1","cbm":"1"},{"note":"女","id":"2","cbm":"2"}])  

uni.getStorageSync('key')  

预期结果:

// 输出 [{"note":"男","id":"1","cbm":"1"},{"note":"女","id":"2","cbm":"2"}]

实际结果:

// 输出 {"0":{"note":"男","id":"1","cbm":"1"},"1":{"note":"女","id":"2","cbm":"2"}}

bug描述:

uni.setStorageSync('key', [{"note":"男","id":"1","cbm":"1"},{"note":"女","id":"2","cbm":"2"}])  

uni.getStorageSync('key')  

// 输出 {"0":{"note":"男","id":"1","cbm":"1"},"1":{"note":"女","id":"2","cbm":"2"}}

更多关于uni-app 4.31 uni.setStorageSync() 方法在鸿蒙系统上保存数组后读取变为对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

HBuilderX 4.32.2024110103-alpha 已修复。

更多关于uni-app 4.31 uni.setStorageSync() 方法在鸿蒙系统上保存数组后读取变为对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请问修复了吗? 为什么我4.33.2024111702-alpha还是有这个问题

uni.getStorageSync 有问题 uni.getStorage是正常的

感谢反馈,我排查一下

感谢反馈,问题已确认,之后会修复

修复了么?我的 Hbuilderx 版本是 4.36 了,也有这个问题

回复 success通过: 是不是没有更新 oh-package下的 runtime,这里面的文件还是之前的版本?

回复 DCloud_UNI_yuhe: 我的文件结构里面,没有 oh-package 文件,但是目前是可以 通过 数据线 连接鸿蒙手机真机调试的

只有 dist/release 下面 有 oh-package

在uni-app中使用uni.setStorageSync()方法保存数组数据,在鸿蒙系统上读取时变为对象的问题,可能是由于不同平台对存储数据的解析存在差异。为了确保跨平台的一致性,我们可以考虑在保存数组数据前将其转换为JSON字符串,读取时再将其解析回数组。以下是一个示例代码,展示如何安全地在uni-app中存储和读取数组数据:

保存数组数据

在保存数组数据时,使用JSON.stringify()方法将数组转换为JSON字符串,然后使用uni.setStorageSync()保存。

// 假设我们有一个数组
const myArray = [1, 2, 3, {a: 4, b: 5}];

// 将数组转换为JSON字符串
const arrayString = JSON.stringify(myArray);

// 使用uni.setStorageSync保存数据
uni.setStorageSync('myArrayKey', arrayString);

读取数组数据

在读取数组数据时,使用uni.getStorageSync()获取存储的JSON字符串,然后使用JSON.parse()方法将其解析回数组。

// 使用uni.getStorageSync读取数据
const storedString = uni.getStorageSync('myArrayKey');

if (storedString) {
    // 将JSON字符串解析为数组
    const retrievedArray = JSON.parse(storedString);

    // 现在retrievedArray是一个数组,可以安全使用
    console.log(retrievedArray); // 输出: [1, 2, 3, {a: 4, b: 5}]
} else {
    console.error('未找到存储的数据');
}

完整示例

以下是一个完整的示例,展示如何在uni-app中存储和读取数组数据,确保跨平台的一致性:

// 存储数组数据
function saveArray(key, array) {
    const arrayString = JSON.stringify(array);
    uni.setStorageSync(key, arrayString);
}

// 读取数组数据
function loadArray(key) {
    const storedString = uni.getStorageSync(key);
    return storedString ? JSON.parse(storedString) : null;
}

// 示例数组
const exampleArray = [1, 2, 3, {name: 'uni-app', version: '4.31'}];

// 保存数组
saveArray('exampleKey', exampleArray);

// 读取数组
const loadedArray = loadArray('exampleKey');
if (loadedArray) {
    console.log('Loaded Array:', loadedArray);
} else {
    console.error('Failed to load array');
}

通过上述方法,我们可以确保在不同平台上存储和读取数组数据的一致性和正确性,避免在鸿蒙系统上读取数组数据时变为对象的问题。

回到顶部