HarmonyOS 鸿蒙Next设备升级应用数据迁移验证时,获取旧数据后无法存入Localstorage或Preference中

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next设备升级应用数据迁移验证时,获取旧数据后无法存入Localstorage或Preference中 我们在验证鸿蒙设备升级应用数据迁移时,获取到了需要迁移的数据——用户信息,然后我们想把这些信息直接存到Localstorage或Preference中以便完成迁移后打开APP还是保持登录状态,但是迁移后重新打开APP却发现数据并没有存储成功。难道迁移工具迁和现在的app不是存储时共用LocalStorage和Preference吗,从运行进程结果来看应用程序进程和迁移进程分别是 com.zhangdu.jianghu com.zhangdu.jianghu:backup 两者应该在同一个应用包下的,为什么会存储失败呢 附件中是两个进程的名字截图


更多关于HarmonyOS 鸿蒙Next设备升级应用数据迁移验证时,获取旧数据后无法存入Localstorage或Preference中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
麻烦确认首选项文件是否复制到指定的沙箱目录下

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-device-file-explorer-V5

您好

在OnRestore内访问数据进行最终的恢复时, 通过什么下面的方法,

fileIo的接口可以访问数据

【备份恢复目录获取方式】文档参考上面的第一个链接

let pathEl2Dir = “/data/storage/el2/backup/restore/com.demo.demo”;

this.context.area = contextConstant.AreaMode.EL2;

let destEl2Path = this.context.filesDir;

try {

fileIo.copyDirSync(pathEl2Dir, destEl2Path, 1)

console.log(TAG, copyEl2Dirsuccess);

} catch (error) {

console.log(TAG, copyEl2Dirfail);

}


db文件操作参考:

/**

  • 移动文件
  • 将文件从备份恢复的原始路径移动到应用的沙箱路径中指定的目录
  • 默认是CE分区,对应el2
  • 如果需要修改分区,则需要单独指定
  • 如:指定DE分区,对应el1
  • context.area = contextConstant.AreaMode.EL1;
  • @param context context上下文
  • @return 成功返回true, 否则false */ private moveFiles(context: common.Context): boolean { try { // ce路径前缀,数据迁移时会将双框架/data/data/${双包名}下的数据迁移至此处 let cePathPrefix: string = ‘/data/storage/el2/backup/restore/com.midea.out.css.test/ce’;//写法参考备份恢复目录链接 // 需要移动的源文件路径,根据实际路径来指定,如这里移动files/sourceFiles下面的所有文件 let sourceFilePath: string = cePathPrefix + ‘/files/sourceFiles’; if (!fs.accessSync(sourceFilePath)) { LogUtils.error(TAG, moveFiles, ${sourceFilePath} can't access); return false; } // 得到源路径下面所有的文件和目录 let listFileNames: string[] = fs.listFileSync(sourceFilePath); if (!listFileNames || listFileNames.length === 0) { LogUtils.error(TAG, moveFiles, ${sourceFilePath} is not file); return false; } // 目标路径根据实际情况来指定, 如这里是沙箱路径files下面的targetFiles目录 let targetPath: string = context.filesDir + ‘/targetFiles’; // 目标目录不存在,则需要创建 if (!fs.accessSync(targetPath)) { fs.mkdirSync(targetPath); } // 遍历源路径下面的文件或目录,进行移动 listFileNames.forEach((fileName: string) => { let srcPath: string = ${sourceFilePath}/${fileName}; let destPath: string = ${targetPath}/${fileName}; if (fs.statSync(srcPath).isFile()) { fs.moveFileSync(srcPath, destPath); } else { fs.moveDirSync(srcPath, targetPath); } }); return true; } catch (error) { LogUtils.error(TAG, moveFiles, error: ${JSON.stringify(error)}); return false; } }

PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后(即loadContent传入的回调被调用时)才可以被调用,早于该时机调用会导致持久化失败。

参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-persiststorage-V5#限制条件

可以把登录态继承的逻辑,放在UI实例初始化成功之后再试一下是否能解决问题

更多关于HarmonyOS 鸿蒙Next设备升级应用数据迁移验证时,获取旧数据后无法存入Localstorage或Preference中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next设备升级应用数据迁移验证过程中,若遇到获取旧数据后无法存入LocalStorage或Preference中的问题,可能的原因及处理方式如下:

  1. 权限问题:确保应用已正确申请并获得了存储相关权限。鸿蒙系统对数据访问有严格的安全控制,未授权则无法写入。

  2. 数据格式不兼容:检查从旧设备迁移的数据格式是否与LocalStorage或Preference的存储格式兼容。例如,若迁移的是复杂对象而非简单键值对,可能需进行序列化处理。

  3. 存储空间限制:确认设备存储空间是否充足。若空间不足,将导致数据写入失败。

  4. 版本差异:不同版本的鸿蒙系统可能在数据存储机制上存在差异。确认迁移策略是否考虑了系统版本因素。

  5. 并发写入冲突:若应用存在多线程写入情况,需确保数据写入时的线程安全,避免并发冲突导致写入失败。

  6. 日志诊断:查看应用日志,分析数据写入失败时的具体错误信息,有助于定位问题。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部