HarmonyOS 鸿蒙Next中应用退出再次启动后,依然能获取上次保存的结果

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

HarmonyOS 鸿蒙Next中应用退出再次启动后,依然能获取上次保存的结果 应用退出再次启动后,依然能获取上次保存的结果,比如 UserInfo 对象

class UserInfo {
  isLogin?: boolean;
  loginType?: string;
}
let user: UserInfo = new UserInfo();
user.isLogin = true

preferences不能保存自定义类型,请问如何保存User对象到应用中,再次打开怎么获取到对象值。

3 回复

您可以通过PersistentStorage进行持久化存储,具体可以参考文档: PersistentStorage:持久化存储UI状态-管理应用拥有的状态-状态管理(V1)-状态管理-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者

以下是为您写的示例代码:

class UserInfo {
    isLogin?: boolean;
    loginType?: string;
}

let user: UserInfo = new UserInfo();
user.isLogin = true;

PersistentStorage.persistProp('aProp', JSON.stringify(user));

@Entry
@Component
struct Index {
    @State message: string = 'Hello World';
    @StorageLink('aProp') aProp: string = '';

    build() {
        Row() {
            Column() {
                Text(this.aProp)
                    .fontSize(50)
                    .fontWeight(FontWeight.Bold)
                    .onClick(() => {
                        let data: UserInfo = JSON.parse(this.aProp);
                        data.isLogin = !data.isLogin;
                        AppStorage.setOrCreate('aProp', JSON.stringify(data));
                    });
            }.width('100%')
        }.height('100%')
    }
}

这边测试时另一个页面可以拿到的,以下为示例代码:

index页面:

import UserInfo from './user'

import { router } from '@kit.ArkUI'

let user:UserInfo = new UserInfo()
user.isLogin = true

PersistentStorage.persistProp('aProp',JSON.stringify(user))

@Entry
@Component
struct Index {

  @State message: string = 'Hello World';

  @StorageLink('aProp') aProp: string = ''

  build() {

    Row() {

      Column() {

        Text(this.aProp)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let data:UserInfo = JSON.parse(this.aProp)
            data.isLogin = !data.isLogin
            AppStorage.setOrCreate('aProp',JSON.stringify(data));
          })

        Text('test页面')
          .onClick(() => {
            router.pushUrl({
              url:'pages/test'
            })
          })
      }

      .width('100%')
    }

    .height('100%')
  }

}

test页面:

import UserInfo from './user'

import { router } from '@kit.ArkUI';

@Entry
@Component
struct Test {

  @State message: string = 'Hello World';

  @StorageLink('aProp') aProp: string = ''

  build() {

    Row() {

      Column() {

        Text(this.aProp)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            let data:UserInfo = JSON.parse(this.aProp)
            data.isLogin = !data.isLogin
            AppStorage.setOrCreate('aProp',JSON.stringify(data));
          })

        Text('index页面')
          .onClick(() => {
            router.pushUrl({
              url:'pages/Index'
            })
          })
      }

      .width('100%')
    }

    .height('100%')
  }

}

user页:

export default class UserInfo {

  isLogin?:boolean ;

  loginType?:string;

}

更多关于HarmonyOS 鸿蒙Next中应用退出再次启动后,依然能获取上次保存的结果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,应用退出后再次启动仍能获取上次保存的结果,这通常是通过持久化存储机制实现的。鸿蒙系统提供了多种数据存储方式,包括轻量级数据存储(Preferences)、分布式数据服务(Distributed Data Service, DDS)、文件存储以及数据库存储等。

  1. 轻量级数据存储(Preferences):Preferences是一种轻量级的键值对存储方式,适合存储简单的配置信息或用户偏好设置。数据会被持久化保存在设备的本地存储中,即使应用退出或设备重启,数据依然可以被读取。

  2. 文件存储:开发者可以通过文件系统将数据存储在设备的内部或外部存储中。文件存储适合存储较大或结构化的数据,应用再次启动时可以通过读取文件来获取之前保存的结果。

  3. 数据库存储:鸿蒙系统支持使用关系型数据库(如SQLite)来存储结构化数据。数据库中的数据会持久化保存,应用再次启动时可以通过查询数据库来获取之前保存的数据。

  4. 分布式数据服务(DDS):在分布式场景下,鸿蒙系统提供了分布式数据服务,允许应用在多设备间同步和共享数据。数据会被持久化保存在分布式数据库中,应用再次启动时可以从分布式数据库中获取数据。

这些存储机制确保了应用在退出后再次启动时,能够访问到之前保存的数据,从而保持用户操作的连续性和一致性。

在HarmonyOS(鸿蒙)Next中,应用退出后再次启动时依然能够获取上次保存的结果,这是因为数据持久化机制在发挥作用。开发者可以通过以下几种方式实现数据持久化:

  1. Preferences:轻量级键值对存储,适合存储简单配置或用户偏好。
  2. Database:使用SQLite数据库存储结构化数据。
  3. File Storage:通过文件系统存储较大或复杂数据。
  4. Distributed Data Management:在分布式场景下跨设备同步数据。

具体实现时,开发者应在应用退出前将数据保存到上述持久化存储中,并在应用再次启动时从存储中读取数据,确保用户体验的连贯性。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!