HarmonyOS 鸿蒙Next PersistentStorage持久化存储数据

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

HarmonyOS 鸿蒙Next PersistentStorage持久化存储数据

我登陆以后使用PersistentStorage.persistProp(PreferenceKey.Key_User_Info,JSON.stringify(userInfo))存储用户信息,在不杀死App的情况下使用AppStorage.get()可以获取到用户信息,但是杀死进程重新启动后,AppStorage.get()又获取不到了,大家知道原因吗?


更多关于HarmonyOS 鸿蒙Next PersistentStorage持久化存储数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

参考一下这个demo:

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
      })
      //.backgroundColor('#32CD32')
    }
    .width('90%')
    .height('50')
    //.backgroundColor('#00BFFF')

  }
  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 PersistentStorage持久化存储数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next PersistentStorage持久化存储数据主要通过分布式数据管理(Distributed Data Management,DDM)和本地持久化存储机制实现。

对于分布式数据管理,HarmonyOS提供了统一的API接口,开发者可以通过这些接口实现跨设备的数据同步和持久化存储。在HarmonyOS的分布式架构下,数据可以在多个设备间无缝流转,确保用户在不同设备上都能访问到最新的数据。

对于本地持久化存储,HarmonyOS提供了多种存储方式,包括关系型数据库(如SQLite)、键值对存储(如Key-Value Storage)、文件存储等。开发者可以根据应用的需求选择合适的存储方式。其中,键值对存储适用于简单的数据存储需求,而关系型数据库则更适合复杂的数据结构和查询需求。

在具体实现时,开发者需要按照HarmonyOS的API规范进行开发,通过调用相应的接口实现数据的持久化存储和读取。同时,为了保证数据的安全性和可靠性,开发者还需要注意数据的备份和恢复机制,以及处理可能出现的异常情况。

总之,HarmonyOS 鸿蒙Next为开发者提供了丰富的持久化存储方案,开发者可以根据应用的需求和场景选择合适的存储方式。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部