HarmonyOS鸿蒙Next数据管理,如何将登录数据缓存到本地
HarmonyOS鸿蒙Next数据管理,如何将登录数据缓存到本地 我想登录成功后将token、账号、密码缓存到本地,供下次重新打开APP的时候判断使用,如果本地缓存有token,就直接跳转首页,而不用每次打开APP都要重新登录。
我已从之前的咨询中掌握了:
AppStorage.setOrCreate(userInfo, userInfoValue)
AppStorage.get(userInfo)
但是我发现AppStorage在重启APP后缓存的token会变成undefined
所以我该如何正确将数据缓存到本地
请参考以下链接:Harmonyos Next 管理应用拥有的状态概述
更多关于HarmonyOS鸿蒙Next数据管理,如何将登录数据缓存到本地的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
AppStorage是运行时的内存,但是在应用退出再次启动后,还想拿到保存选定的结果,需要用到PersistentStorage。文档如下:
同时还通过用户首选项实现数据持久化,文档如下:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-preferences-V5
import router from '@ohos.router'
PersistentStorage.persistProp('token', '')
@Entry
@Component
struct Index {
@State message: string = '这是登录页';
private title: string = "手机号登录"
private backColor: ResourceColor = "#DC143C"
@StorageLink('token') token: string = ''
onPageShow() {
if (this.token.length > 0 && this.token !== "undefined"){
console.log('登录页 onPageShow token有值 说明之前 有登录过 直接跳转到首页' + this.token)
this.goToHome()
} else {
console.log('登录页 onPageShow token没值 说明之前 没登录过')
}
}
build() {
Stack(){
Text(this.message + this.token)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.margin({
top:200
})
Button()
.type(ButtonType.Capsule)
.width('100%')
.height('50')
.backgroundColor(this.backColor)
.border({
color:'#CCCCCC',
width:1
})
.margin({
top:500
})
Row(){
Text(this.title)
.fontSize(18)
.fontColor('#333333')
Text('(上次登录)')
.fontSize(14)
.fontColor('#C0C0C0')
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
.onClick(() =>{
this.mobilePhoneLoginClick()
})
.margin({
top:500
})
}
.width('90%')
.height('50')
}
mobilePhoneLoginClick(){
console.info('手机号登录 点击')
this.loginSuccess()
}
loginSuccess(){
let token = 'abc123456'
console.info('登录成功 存本地的 token:' + token)
AppStorage.setOrCreate('token',token)
this.goToHome()
}
goToHome(){
console.info('跳转到 首页')
router.pushUrl({ url: 'pages/Home' })
}
}
// 下面是Home.ets页面
@Entry
@Component
struct Home {
@State message: string = '这是首页';
@State token: string = ''
onPageShow() {
this.token = AppStorage.get('token') + ''
console.info('首页 取存在本地的 temp:' + this.token)
}
build() {
Row() {
Column() {
Text(this.message + this.token)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
因为数据没有持久化,把数据持久化一下,或者用首选项储存一下
可以用三方库mmkv进行持久化存储,比用户首选项啥的都好用,openharmony三方库网站:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fmmkv
在HarmonyOS中,可以使用Preferences
来实现登录数据的本地缓存。Preferences
是一种轻量级的键值对存储方式,适合存储简单的配置数据或用户登录信息。
-
初始化Preferences:
首先,需要获取
Preferences
实例。可以通过DataAbilityHelper
或Context
来获取。import preferences from '[@ohos](/user/ohos).data.preferences'; let preferencesInstance = null; preferences.getPreferences(this.context, 'myLoginData').then((pref) => { preferencesInstance = pref; }).catch((err) => { console.error("Failed to get preferences.", err); });
-
存储登录数据:
使用
put
方法将登录数据存储到Preferences
中。preferencesInstance.put('username', 'user123').then(() => { return preferencesInstance.put('password', 'pass123'); }).then(() => { return preferencesInstance.flush(); }).catch((err) => { console.error("Failed to save login data.", err); });
-
读取登录数据:
使用
get
方法从Preferences
中读取登录数据。preferencesInstance.get('username', 'defaultUsername').then((value) => { console.log("Username: " + value); }).catch((err) => { console.error("Failed to read username.", err); }); preferencesInstance.get('password', 'defaultPassword').then((value) => { console.log("Password: " + value); }).catch((err) => { console.error("Failed to read password.", err); });
-
删除登录数据:
使用
delete
方法从Preferences
中删除登录数据。preferencesInstance.delete('username').then(() => { return preferencesInstance.delete('password'); }).then(() => { return preferencesInstance.flush(); }).catch((err) => { console.error("Failed to delete login data.", err); });
-
清除所有数据:
使用
clear
方法清除Preferences
中的所有数据。preferencesInstance.clear().then(() => { return preferencesInstance.flush(); }).catch((err) => { console.error("Failed to clear preferences.", err); });
通过以上步骤,可以实现登录数据的本地缓存和管理。Preferences
提供了一种简单且高效的方式来处理轻量级数据存储需求。
在HarmonyOS鸿蒙Next中,可以使用Preferences
进行数据管理,将登录数据缓存到本地。具体步骤如下:
- 导入
@ohos.data.preferences
模块。 - 使用
getPreferences
方法获取Preferences
实例。 - 使用
put
方法存储登录数据,如用户名和密码。 - 调用
flush
方法将数据持久化到本地。
示例代码:
import dataPreferences from '@ohos.data.preferences';
async function saveLoginData(context, key, value) {
let preferences = await dataPreferences.getPreferences(context, 'userLoginData');
await preferences.put(key, value);
await preferences.flush();
}
这样,登录数据就会被安全地缓存到本地。