HarmonyOS鸿蒙Next中使用AppStorage存储用户数据重启启动就获取不到了

HarmonyOS鸿蒙Next中使用AppStorage存储用户数据重启启动就获取不到了 使用AppStorage存储用户数据应用重启启动就获取不到了,我看到网上说得只能储存2kb的数据对么?

3 回复
AppStorage需要与PersistentStorage绑定使用:

```typescript
import router from '[@ohos](/user/ohos).router';
PersistentStorage.persistProp('token', '')

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) message: string = '这是登录页';
  private title: string = "手机号登录"
  private backColor: ResourceColor = "#DC143C"
  [@StorageLink](/user/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](/user/Entry)
[@Component](/user/Component)
struct Home {
  [@State](/user/State) message: string = '这是首页';
  [@State](/user/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%')
  }
}

AppStoreage没有大小限制,单条数据[k,v],v也没有限制,但是不建议单条v大于1kb,大于1kb建议使用数据库。多条使用没有限制,会动态分配的。

更多关于HarmonyOS鸿蒙Next中使用AppStorage存储用户数据重启启动就获取不到了的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,AppStorage是用于应用内全局状态管理的工具,它基于内存存储,数据在应用进程生命周期内有效。如果应用重启,AppStorage中的数据会被清除,无法持久化存储。因此,重启后无法获取之前存储的数据是正常行为。

如果需要持久化存储用户数据,可以使用鸿蒙提供的其他存储方案,如:

  1. Preferences:用于存储键值对数据,适合存储小量、简单的配置或用户偏好数据。数据会持久化存储在设备上,应用重启后仍然可以访问。

  2. RDB:关系型数据库,适合存储结构化数据,支持SQL操作,数据持久化存储在设备上。

  3. File:通过文件系统进行数据存储,适合存储较大或非结构化的数据,如文本、图片等。

AppStorage适用于临时状态管理,不适合需要持久化的场景。

在HarmonyOS鸿蒙Next中,AppStorage是用于存储应用全局数据的机制,但其数据在应用重启后不会持久化。如果需要持久化存储用户数据,建议使用PreferencesDatabase等持久化存储方式。Preferences适合存储简单的键值对数据,而Database适合存储结构化的复杂数据。这样,即使应用重启,数据仍然可以保留。

回到顶部