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
待解决
相关问题
dataPreferences.Preferences取不到数据
249浏览 • 0回复 待解决
KVManager 存储数据后,启动 App 读取失败
250浏览 • 1回复 待解决
PersistentStorage能否存储大数据量,为什么?
463浏览 • 1回复 待解决
HarmonyOS 获取app的应用缓存数据,调用清除缓存后,再次获取数据大小不变
73浏览 • 1回复 待解决
HarmonyOS 为什么PersistentStorage存储的Json数据 , 重启后会消失?
401浏览 • 1回复 待解决
HarmonyOS app_icon取不到怎么写
10浏览 • 1回复 待解决
HarmonyOS clearAllCookiesSync后再次查询cookie仍有数据
22浏览 • 1回复 待解决
HarmonyOS PersistentStorage 持久化数据成功后,AppStorge.get 为空
273浏览 • 1回复 待解决
HarmonyOS 数据存储中关于大数据存储问题
309浏览 • 1回复 待解决
HarmonyOS 数据存储
31浏览 • 1回复 待解决
HarmonyOS Web组件打开使用websocket请求不到数据问题
324浏览 • 1回复 待解决
HarmonyOS 咨询一下PersistentStorage存储的数据,重启应用后用AppStorage为空
342浏览 • 1回复 待解决
HarmonyOS应用数据存储仍采用沙箱机制,各个APP有自己数据可见范围,为什么不将各APP产生的数据统一存储
360浏览 • 1回复 待解决
ResourceTable取不到layout
11272浏览 • 3回复 待解决
调用preferences.get接口,获取不到之前存储的数据
2280浏览 • 1回复 待解决
HarmonyOS PersistentStorage 持久化的数据重启应用后数据为空
87浏览 • 1回复 待解决
如果将服务端的数据存储到app本地进行数据的交互,该如何存储?
783浏览 • 2回复 待解决
HarmonyOS APP关系型数据库安全存储的位置
57浏览 • 1回复 待解决
PersistentStorage必须在当前进程中读取。PersistentStorage是应用程序中的可选单例对象,用于持久化存储选定的AppStorage属性,确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同 。所有属性访问都是通过AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage 。
因此,PersistentStorage的读取和写入操作都必须在当前进程中进行。
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-persiststorage-V5