首页 鸿蒙 正文
  • 本文约2238字,阅读需11分钟
  • 134
  • 0

HarmonyOS 鸿蒙首选项

温馨提示:本文最后更新于2024年9月22日 10:01,若内容或图片失效,请在下方留言或联系博主。

首选项 只能保存字符串,所以我们借助了 JSON的stringify和parse两个方法来进行相互转换。在存的时候调用JSON.stringify将数组转换成json字符串来存储,读取的时候调用了JSON.parse将json字符串转换成了数组,方便操作

首选项大概能存储8KB数量的数据所以存储的数据量应该是轻量级的,为了性能考虑,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。

首选项的基本操作 :

1.初始化首选项实例

import { preferences } from '@kit.ArkData';  // 导入首选项api
const KEY = 'keyword'  // 保存数据的名字 后期对它增删改查
// 获得首选项实例 
// getContext()是一个上下文的对象   
// searchStore 简单来说存放的目录,或者是文件夹(自定义),每个searchStore中都有自己的数据
const preferencesInstance = preferences.getPreferencesSync(getContext(), { name: ‘searchStore’})

 2. 向首选项写入数据并持久化到文件中(适用于初次写入数据和更新数据)

// 利用首选项实例的put方法可以写入数据
// 第一个参数KEY:要写入数据的key
// 第二个参数value:要写入的数据
preferencesInstance.put(KEY, 要保存的值)
// KEY 的值为 keyword  可以根据它找到保存的值 而保存它的文件夹 叫做 searchStore

// 使用 .flush() 才能将数据写入到文件中
preferencesInstance.flush()

3. 获取首选项数据

// 利用首选项实例的get方法可以读取KEY中的数据
// 第一个参数KEY:要获取数据的key
// 第二个参数defValue:如果没有读取到数据,则返回默认数据
preferencesInstance.get(KEY, 默认值)  // 可以给一个默认值
// KEY 的值为 keyword  可以根据它找到保存的值 而保存它的文件夹 叫做 searchStore

 4. 删除指定KEY的数据

// 调用 deleteSync() KEY为当时 定义的目录
preferencesInstance.deleteSync(KEY)
// KEY 的值为 keyword  可以根据它value的值 删除

5. 获取首选项文件的路径

// 返回值 就是 文件所在 项目中的路径
getContext().preferencesDir

ps:其实目录和Key可以省略成一个 目录名就是 键(数据少没问题)

完整代码演示:

import { preferences } from '@kit.ArkData'
import { promptAction } from '@kit.ArkUI'

@Entry
@Component
struct SearchPage {
  build() {
    Row() {
      Column() {

        Button('向首选项保存数据').onClick(async (event: ClickEvent) => {
          const store = await preferences.getPreferences(getContext(), { name: 'stroe' })
          await store.put("name", "鸿蒙1期")
          await store.flush()
          promptAction.showToast({ message: '保存成功' })
        })

        Button('更新首选项数据').onClick(async (event: ClickEvent) => {
          const store = await preferences.getPreferences(getContext(), { name: 'stroe' })
          await store.put("name", "昌平鸿蒙1期")
          await store.flush()
          promptAction.showToast({ message: '更新成功' })
        })

        Button('获取首选项数据').onClick(async (event: ClickEvent) => {
          const store = await preferences.getPreferences(getContext(), { name: 'stroe' })
          let res = await store.get("name", "这是默认值")
          promptAction.showToast({ message: res.toString() })
        })

        Button('删除首选项数据').onClick(async (event: ClickEvent) => {
          const store = await preferences.getPreferences(getContext(), { name: 'stroe' })
          store.deleteSync('name')
          await store.flush()
          promptAction.showToast({ message: '删除成功' })
        })

        Button('获取首选项文件路径').onClick(async (event: ClickEvent) => {
          let dir = getContext().preferencesDir
          AlertDialog.show({message:dir})
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
评论