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