HarmonyOS 鸿蒙Next 如何将数据缓存到本地?

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将数据缓存到本地? 如何将数据缓存到本地? 我想登录成功后将token、账号、密码缓存到本地,供下次重新打开APP的时候判断使用,如果本地缓存有token,就直接跳转首页,而不用每次打开APP都要重新登录。 我已从之前的咨询中掌握了: AppStorage.setOrCreate(userInfo, userInfoValue) AppStorage.get(userInfo) 但是我发现AppStorage在重启APP后缓存的token会变成 undefined 所以我该如何正确将数据缓存到本地?

3 回复

AppStorage是运行时的内存,但是在应用退出再次启动后,还想拿到保存选定的结果,需要用到PersistentStorage。文档如下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-persiststorage-0000001774119950-V5

同时还通过用户首选项实现数据持久化,文档如下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-preferences-V5

AppStorage和PersistentStorage做了修改,如下

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%')
  }
}

更多关于HarmonyOS 鸿蒙Next 如何将数据缓存到本地?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


结合PersistentStorage实现本地数据持久化:

PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。

PersistentStorage和AppStorage中的属性建立双向同步。应用开发通常通过AppStorage访问PersistentStorage,另外还有一些接口可以用于管理持久化属性,但是业务逻辑始终是通过AppStorage获取和设置属性。

参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-persiststorage-V5

在HarmonyOS(鸿蒙)系统中,将数据缓存到本地通常可以通过文件系统或者数据库来实现。以下是两种常见的方法:

  1. 使用文件系统缓存数据: HarmonyOS提供了丰富的文件系统API,可以用于读写本地文件。你可以将数据序列化为字符串或二进制格式,然后写入到指定的文件路径中。读取时,再从该路径读取文件内容并反序列化为原始数据格式。这种方法适用于简单的键值对存储或较大块的二进制数据。

  2. 使用数据库缓存数据: 对于需要频繁查询和更新的结构化数据,使用数据库是更合适的选择。HarmonyOS支持SQLite等轻量级数据库,你可以创建数据库表来存储数据,并通过SQL语句进行数据的增删改查操作。数据库方式提供了更好的数据管理和查询性能。

需要注意的是,选择哪种方法取决于你的具体需求,如数据的类型、大小、访问频率等。在实际开发中,应根据应用场景权衡利弊,选择最适合的缓存方案。

如果问题依旧没法解决请联系官网客服,官网地址是: https://www.itying.com/category-93-b0.html

回到顶部