HarmonyOS 鸿蒙Next设备升级应用数据迁移验证时,获取旧数据后无法存入Localstorage或Preference中
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
麻烦确认首选项文件是否复制到指定的沙箱目录下
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