HarmonyOS鸿蒙Next中使用shared_preferences存储用户登录状态,更新升级APP后数据被清空了,如何解决

HarmonyOS鸿蒙Next中使用shared_preferences存储用户登录状态,更新升级APP后数据被清空了,如何解决 Flutter项目,使用了适配鸿蒙的FlutterSDK,使用shared_preferences存储了登录用户的token,升级安装后,token空了,又得重新登录,有没有大佬遇到过,如何解决

4 回复

沙箱不删除就不会丢失,除非在覆盖安装升级的时候有清理逻辑,把沙箱内容清理了。

在调试阶段,IDE中单击Run > Edit Configurations,设置指定模块的HAP安装方式,勾选“Keep Application Data”,则表示采用覆盖安装方式,保留应用/服务缓存数据。

更多关于HarmonyOS鸿蒙Next中使用shared_preferences存储用户登录状态,更新升级APP后数据被清空了,如何解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS Next中使用shared_preferences存储的数据在APP升级后被清空,是因为该方式默认存储在应用沙箱内,升级时会被系统清除。解决方案:

  1. 使用@ohos.data.preferences的持久化存储接口,设置persistent属性为true
  2. 通过分布式数据管理接口将数据同步到云端
  3. 使用HarmonyOS Key-Value存储API时指定PERSISTENCE_LEVEL_COMPLETE

注意:以上方案需要API 9+支持,需在config.json中声明所需权限。数据迁移需在升级前完成。

在HarmonyOS Next中,shared_preferences数据丢失的问题通常是由于应用升级时数据目录变更导致的。以下是解决方案:

  1. 使用HarmonyOS提供的持久化存储方案替代:
  • 推荐使用HarmonyOS的Preferences或分布式数据管理接口
  • Preferences示例:
import preferences from '@ohos.data.preferences';

let preferences = await preferences.getPreferences(context, 'userData');
await preferences.put('token', 'your_token');
await preferences.flush();
  1. 对于现有Flutter项目:
  • 确保shared_preferences插件版本是最新的
  • 在AndroidManifest.xml中添加:
<application
    android:allowBackup="true"
    android:fullBackupContent="@xml/backup_descriptor">
  1. 数据迁移方案:
  • 在应用启动时检查shared_preferences数据
  • 如果为空,尝试从旧路径恢复数据
  1. 临时解决方案:
  • 在升级前调用shared_preferences的commit()方法确保数据写入
  • 考虑在升级时先将数据备份到云存储

注意:HarmonyOS Next对数据存储有更严格的安全策略,建议尽快迁移到官方推荐的持久化存储方案。

回到顶部