HarmonyOS PersistentStorage存储数据后再次打开app取不到数据
PersistentStorage存储数据后再次打开app时取出数据的数据为undefined
用户登录页面,登录成功时将用户一些基础信息存储在本地,下次打开app时可以自动登录校验,但是再次打开App时 AppStorage.get取出的数据都为undefined可看截图,查看沙盒文件中数据是存在的可看截图。另外调试发现,在App当前进程中存储后,然后去读取,数据是能正常取到的。
代码如下:
import { AccountModel } from '../models/user/AccountModel'
import { isStringEmpty } from '../utils/JudgeUtils';
import { LoginApi } from '../network/apis/LoginApi'
import { Logger } from '../utils/Logger'
import { LoginError } from '../network/HttpError'
import { AppConstants } from '../constants/AppConstants'
const TAG: string = 'DanDan-login'
AppStorage.link('uid');
AppStorage.link('token');
AppStorage.link('userSig');
AppStorage.link('phone');
export class AccountCenter {
  private static instance: AccountCenter;
  accountModel: AccountModel = new AccountModel();
  public static getInstance(): AccountCenter {
    if (!AccountCenter.instance) {
      AccountCenter.instance = new AccountCenter();
      const uid: string | undefined = AppStorage.get('uid');
      const token: string | undefined = AppStorage.get('token');
      const userSig: string | undefined = AppStorage.get('userSig');
      const phone: string | undefined = AppStorage.get('phone');
      const model: AccountModel = new AccountModel();
      model.uid = uid ? uid : '';
      model.token = token ? token : '';
      model.userSig = userSig ? userSig : '';
      model.phone = phone ? phone : '';
      AccountCenter.instance.accountModel = model;
      if (!isStringEmpty(model.uid) && !isStringEmpty(model.token)) {
        AppStorage.setOrCreate('isLogin', true);
      } else {
        AppStorage.setOrCreate('isLogin', false);
      }
    }
    return AccountCenter.instance
  }
  public static setInstance(account: AccountModel) {
    AccountCenter.instance.accountModel = account;
    // 本地化缓存里存储 
    PersistentStorage.persistProp('uid', account.uid);
    PersistentStorage.persistProp('token', account.token);
    PersistentStorage.persistProp('userSig', account.userSig);
    PersistentStorage.persistProp('phone', account.phone);
    if (!isStringEmpty(account.uid) && !isStringEmpty(account.token)) {
      AppStorage.setOrCreate('isLogin', true);
    } else {
      AppStorage.setOrCreate('isLogin', false);
    }
  }
  logInWithPhone(params: Record<string, Object>): Promise<AccountModel> {
    return new Promise((resolve, reject) => {
      LoginApi.userLogin(params).then((data: AccountModel) => {
        AccountCenter.setInstance(data)
        Logger.info(TAG, `登录接口返回信息:${data}`)
        resolve(data);
      }).catch((error: Error) => {
        //判断异常是否 LoginError
        if (error instanceof LoginError) {
          const LoginError = error as LoginError;
          if (LoginError.code == AppConstants.TRUSTED_DEVICES_ERROR_COD) {
            this.logout();
            reject(LoginError);
          } else if (LoginError.code == AppConstants.DELETE_ACCOUNT_ERROR_COD) {
          } else {
          }
        }
        reject(error);
      })
    })
  }
}


        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS 使用PersistentStorage和AppStorage持久化数据后,再次打开应用仍然访问到的是默认数据 
1097浏览  • 1回复 待解决
dataPreferences.Preferences取不到数据 
1618浏览  • 1回复 待解决
HarmonyOS PersistentStorage.persistProp存储了数据之后,杀死应用进程,下次再打开应用,数据丢失了 
1755浏览  • 1回复 待解决
KVManager 存储数据后,启动 App 读取失败 
1487浏览  • 1回复 待解决
HarmonyOS 获取app的应用缓存数据,调用清除缓存后,再次获取数据大小不变 
1151浏览  • 1回复 待解决
PersistentStorage能否存储大数据量,为什么? 
1581浏览  • 1回复 待解决
HarmonyOS  clearAllCookiesSync后再次查询cookie仍有数据 
719浏览  • 1回复 待解决
HarmonyOS 为什么PersistentStorage存储的Json数据 , 重启后会消失? 
1865浏览  • 1回复 待解决
HarmonyOS app_icon取不到怎么写 
940浏览  • 1回复 待解决
HarmonyOS PersistentStorage用于持久化状态后,后台退出应用,再次进入,存储的值是空的 
1258浏览  • 1回复 待解决
HarmonyOS 使用AppStorage/PersistentStorage持久化数据,杀死进程后重启应用,数据丢失 
1210浏览  • 1回复 待解决
HarmonyOS AccessStore取数据失败 
663浏览  • 1回复 待解决
HarmonyOS PersistentStorage 持久化数据成功后,AppStorge.get 为空 
1352浏览  • 1回复 待解决
HarmonyOS Web组件打开使用websocket请求不到数据问题 
2131浏览  • 1回复 待解决
HarmonyOS 数据存储中关于大数据存储问题 
1589浏览  • 1回复 待解决
HarmonyOS 数据存储 
1279浏览  • 1回复 待解决
HarmonyOS 咨询一下PersistentStorage存储的数据,重启应用后用AppStorage为空 
1424浏览  • 1回复 待解决
HarmonyOS应用数据存储仍采用沙箱机制,各个APP有自己数据可见范围,为什么不将各APP产生的数据统一存储 
1397浏览  • 1回复 待解决
ResourceTable取不到layout 
12793浏览  • 3回复 待解决
调用preferences.get接口,获取不到之前存储的数据 
3799浏览  • 1回复 待解决
HarmonyOS  PersistentStorage 持久化的数据重启应用后数据为空 
1164浏览  • 1回复 待解决
HarmonyOS kvStore成功创建数据库后,获取数据库时报错找不到数据库 
1216浏览  • 1回复 待解决





















PersistentStorage必须在当前进程中读取。PersistentStorage是应用程序中的可选单例对象,用于持久化存储选定的AppStorage属性,确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同 。所有属性访问都是通过AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage 。
因此,PersistentStorage的读取和写入操作都必须在当前进程中进行。
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-persiststorage-V5