一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

harmony OS NEXT-通過(guò)用戶首選項(xiàng)實(shí)現(xiàn)數(shù)據(jù)持久化

程奕紅 ? 來(lái)源:jf_34770892 ? 作者:jf_34770892 ? 2025-04-29 16:38 ? 次閱讀

# 鴻蒙通過(guò)用戶首選項(xiàng)實(shí)現(xiàn)數(shù)據(jù)持久化

## 1.1 場(chǎng)景介紹

用戶首選項(xiàng)為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級(jí)數(shù)據(jù),并對(duì)其修改和查詢。當(dāng)用戶希望有一個(gè)全局唯一存儲(chǔ)的地方,可以采用用戶首選項(xiàng)來(lái)進(jìn)行存儲(chǔ)。Preferences會(huì)將該數(shù)據(jù)緩存在內(nèi)存中,當(dāng)用戶讀取的時(shí)候,能夠快速?gòu)膬?nèi)存中獲取數(shù)據(jù),當(dāng)需要持久化時(shí)可以使用flush接口將內(nèi)存中的數(shù)據(jù)寫(xiě)入持久化文件中。Preferences會(huì)隨著存放的數(shù)據(jù)量越多而導(dǎo)致應(yīng)用占用的內(nèi)存越大,因此,Preferences不適合存放過(guò)多的數(shù)據(jù),也不支持通過(guò)配置加密,適用的場(chǎng)景一般為應(yīng)用保存用戶的個(gè)性化設(shè)置(字體大小,是否開(kāi)啟夜間模式)等。

## 2.1 運(yùn)作機(jī)制

用戶首選項(xiàng)為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級(jí)數(shù)據(jù),并對(duì)其修改和查詢。當(dāng)用戶希望有一個(gè)全局唯一存儲(chǔ)的地方,可以采用用戶首選項(xiàng)來(lái)進(jìn)行存儲(chǔ)。Preferences會(huì)將該數(shù)據(jù)緩存在內(nèi)存中,當(dāng)用戶讀取的時(shí)候,能夠快速?gòu)膬?nèi)存中獲取數(shù)據(jù),當(dāng)需要持久化時(shí)可以使用flush接口將內(nèi)存中的數(shù)據(jù)寫(xiě)入持久化文件中。Preferences會(huì)隨著存放的數(shù)據(jù)量越多而導(dǎo)致應(yīng)用占用的內(nèi)存越大,因此,Preferences不適合存放過(guò)多的數(shù)據(jù),也不支持通過(guò)配置加密,適用的場(chǎng)景一般為應(yīng)用保存用戶的個(gè)性化設(shè)置(字體大小,是否開(kāi)啟夜間模式)等。

* 每個(gè)key的value的長(zhǎng)度最大為8kb
* 創(chuàng)建首選項(xiàng)-倉(cāng)庫(kù)的概念-應(yīng)用可以有N個(gè)倉(cāng)庫(kù),一個(gè)倉(cāng)庫(kù)中可以有N個(gè)key

![image-20250302113249158](https://i-blog.csdnimg.cn/img_convert/3eafa43421dce706c4c62eb946e349c6.png)

## 3.1 接口說(shuō)明

| 接口名稱及方法簽名 | 描述 | 參數(shù) | 同步/異步類型 | 約束條件 |
| ------------------------------------------------------------ | ----------------------------------------------------- | ------------------------------------------------------------ | ------------- | ---------------------------------- |
| `getPreferencesSync(context: Context, options: Options): Preferences` | 獲取 `Preferences` 實(shí)例 | `context`: 上下文對(duì)象
`options`: 配置選項(xiàng) | 同步 | 存在對(duì)應(yīng)的異步接口 |
| `putSync(key: string, value: ValueType): void` | 寫(xiě)入鍵值對(duì)(需調(diào)用 `flush` 持久化存儲(chǔ)) | `key`: 鍵名
`value`: 值(需滿足 `ValueType` 類型要求) | 同步 | 存在異步接口 |
| `hasSync(key: string): boolean` | 檢查是否包含指定鍵的鍵值對(duì) | `key`: 鍵名 | 同步 | - 鍵名不能為空
- 存在異步接口 |
| `getSync(key: string, defValue: ValueType): ValueType` | 獲取鍵對(duì)應(yīng)的值(若為空或類型不匹配則返回 `defValue`) | `key`: 鍵名
`defValue`: 默認(rèn)值 | 同步 | 存在異步接口 |
| `deleteSync(key: string): void` | 刪除指定鍵的鍵值對(duì) | `key`: 鍵名 | 同步 | 存在異步接口 |
| `flush(callback: AsyncCallback): void` | 將數(shù)據(jù)異步持久化到文件 | `callback`: 異步回調(diào) | 異步 | - |
| `on(type: 'change', callback: Callback): void` | 訂閱數(shù)據(jù)變更事件(在 `flush` 后觸發(fā)) | `type`: 事件類型(僅支持 `'change'`)
`callback`: 回調(diào)函數(shù)(參數(shù)為變更的 `key`) | - | - |
| `off(type: 'change', callback?: Callback): void` | 取消訂閱數(shù)據(jù)變更事件 | `type`: 事件類型(`'change'`)
`callback`: 可選回調(diào)函數(shù) | - | 若未指定 `callback` 則取消全部訂閱 |
| `deletePreferences(context: Context, options: Options, callback: AsyncCallback): void` | 從內(nèi)存移除實(shí)例并刪除持久化文件(若有) | `context`: 上下文對(duì)象
`options`: 配置選項(xiàng)
`callback`: 異步回調(diào) | 異步 | - |

## 4.1 開(kāi)發(fā)步驟

### 1.導(dǎo)入@kit.ArkData模塊。

```ts
import { preferences } from "@kit.ArkData";
```

### 2.獲取preference實(shí)例,拿到倉(cāng)庫(kù)

`getPreferenceSync`接受兩個(gè)參數(shù),其中一個(gè)參數(shù)是context,另一個(gè)參數(shù)是options

* `context`代表了用戶的上下文,是ability的能力級(jí),也是ability的一個(gè)環(huán)境,這個(gè)東西如果想要獲取分兩種情況

1. 在ability中區(qū)獲取 在`onWindowStageCreate`寫(xiě)入這行代碼即可

```ts
MyPreferenceClass.context = this.context
```

2. 在UI界面去拿

```ts
getContext(this)
```

* `options` 是傳遞給 `preferences.getPreferencesSync()` 的配置對(duì)象,用于定義存儲(chǔ)實(shí)例的倉(cāng)庫(kù)名稱、安全模式等關(guān)鍵屬性

```ts
const store = preferences.getPreferencesSync(MyPreferenceClass.context||getContext(),{
//拿到該名稱的倉(cāng)庫(kù),拿不到就會(huì)給你創(chuàng)建該名稱的倉(cāng)庫(kù),類似數(shù)據(jù)庫(kù)
name:'infoStore'
})
return store
```

### 3.創(chuàng)建增刪改的方法

```ts
//2.寫(xiě)入字段,持久化存儲(chǔ)
static async putStore(info:string){
const store = MyPreferenceClass.getStore()
store.putSync('info',info)
await store.flush()
}
//3.獲取數(shù)據(jù)
static getValue(){
const store = MyPreferenceClass.getStore()
const value = store.getSync('info','666666')
return value
}

//4.刪除數(shù)據(jù)
static async deleteValue(){
const store = MyPreferenceClass.getStore()
//如果不加上flush操作,只是在內(nèi)存中刪除,需要加上flush操作才能寫(xiě)入磁盤(pán)!
store.deleteSync('info')
await store.flush()
}
//5.判斷數(shù)據(jù)是否存在
static judjeValue(val:string){
const store = MyPreferenceClass.getStore()
const value = store.hasSync(val)
return value
}
```

### 4.測(cè)試代碼

```ts
import { MyPreferenceClass } from './utils/MyPreferenceClass'

@Entry
@Component
struct Mytest {
// @State 實(shí)時(shí)更新
@State currentValue: string = '今天天氣真不錯(cuò)!'
@State JudeValue: boolean = false

build() {
//初始化默認(rèn)值

Column({ space: 10 }) {
Text(this.currentValue)
Text(this.JudeValue + '')
Button('寫(xiě)入數(shù)據(jù)')
.onClick(() => {
MyPreferenceClass.putStore('今天天氣并不好')
})
Button('展示數(shù)據(jù)')
.onClick(() => {
this.currentValue = MyPreferenceClass.getValue() as string
})
Button('刪除數(shù)據(jù)')
.onClick(() => {
MyPreferenceClass.deleteValue()
})
Button('是否展示該數(shù)據(jù)')
.onClick(() => {
this.JudeValue = MyPreferenceClass.judjeValue('info')
})
}
.height('100%')
.width('100%')

}
```



審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2469

    瀏覽量

    43642
  • Harmony
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    2852
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙OS開(kāi)發(fā)實(shí)例:【工具類封裝-首選項(xiàng)本地存儲(chǔ)】

    **import dataPreferences from '@ohos.data.preferences'; import bundleManager from '@ohos.bundle.bundleManager';** 本地首選項(xiàng)數(shù)據(jù)的保存,利用key val
    的頭像 發(fā)表于 03-28 15:45 ?2117次閱讀
    鴻蒙<b class='flag-5'>OS</b>開(kāi)發(fā)實(shí)例:【工具類封裝-<b class='flag-5'>首選項(xiàng)</b>本地存儲(chǔ)】

    HarmonyOS開(kāi)發(fā)案例:【用戶首選項(xiàng)

    用戶首選項(xiàng)為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久輕量級(jí)數(shù)據(jù),常用于保存
    的頭像 發(fā)表于 04-18 15:34 ?1222次閱讀
    HarmonyOS開(kāi)發(fā)案例:【<b class='flag-5'>用戶</b><b class='flag-5'>首選項(xiàng)</b>】

    HarmonyOS開(kāi)發(fā)案例:【首選項(xiàng)

    基于HarmonyOS的首選項(xiàng)能力實(shí)現(xiàn)的一個(gè)簡(jiǎn)單示例。
    的頭像 發(fā)表于 04-19 16:20 ?1542次閱讀
    HarmonyOS開(kāi)發(fā)案例:【<b class='flag-5'>首選項(xiàng)</b>】

    如何設(shè)置Xilinx ISE首選項(xiàng)11.x 12.x的默認(rèn)值

    可能是一個(gè)新手問(wèn)題,我們有一個(gè)配置允許不同版本的附加工具,如modelsim,synplicity。我們想知道是否有辦法告訴Xilinx默認(rèn)使用什么。具體來(lái)說(shuō),我們有興趣設(shè)置以下值: 首選項(xiàng)
    發(fā)表于 11-15 11:29

    查看首選項(xiàng)未保存, 如何保存設(shè)置?

    您好,我想把論壇中的帖子看成“平面閱讀模式”而不是“線程閱讀模式”。所以我轉(zhuǎn)到用戶控制面板,編輯配置文件,特性首選項(xiàng),查看首選項(xiàng),并將其設(shè)置為“平面”,然后單擊“保存配置文件”。如果我移動(dòng)到其他
    發(fā)表于 09-11 12:08

    Harmony os java api對(duì)應(yīng)的實(shí)現(xiàn)代碼沒(méi)有開(kāi)放嗎?

    Harmony os java api對(duì)應(yīng)的實(shí)現(xiàn)代碼沒(méi)有開(kāi)放嗎?
    發(fā)表于 11-30 18:06

    ESP8266/ARDUINO構(gòu)建H找不到首選項(xiàng)怎么解決?

    大家好!我對(duì)運(yùn)行 Arduino 核心的 ESP32 有一些扎實(shí)的經(jīng)驗(yàn),并且一直在使用首選項(xiàng)庫(kù)來(lái)存儲(chǔ),你猜對(duì)了,首選項(xiàng),到該平臺(tái)上的 NVS。這是一個(gè)簡(jiǎn)單而順利的過(guò)程。我正在嘗試將我的代碼移植到運(yùn)行
    發(fā)表于 02-21 07:44

    HarmonyOS數(shù)據(jù)管理與應(yīng)用數(shù)據(jù)持久(一)

    的形式存儲(chǔ)數(shù)據(jù),廣泛用于應(yīng)用中的關(guān)系型數(shù)據(jù)的處理,包括一系列的增、刪、改、查等接口,開(kāi)發(fā)者也可以運(yùn)行自己定義的SQL語(yǔ)句來(lái)滿足復(fù)雜業(yè)務(wù)場(chǎng)景的需要。 三. 通過(guò)用戶
    發(fā)表于 11-01 16:27

    關(guān)于MPLAB Harmony中項(xiàng)目恢復(fù)和備份選項(xiàng)的具體介紹

    MPLAB Harmony專輯 - 第5集 - MPLAB Harmony中的項(xiàng)目恢復(fù)和備份選項(xiàng)
    的頭像 發(fā)表于 07-08 00:33 ?3056次閱讀

    華為認(rèn)為Harmony OS成熟需要5到10年

    在從電視到汽車娛樂(lè)系統(tǒng)的各種產(chǎn)品中無(wú)縫運(yùn)行。華為高級(jí)全球產(chǎn)品經(jīng)理彼得·高登(Peter Gauden)表示,對(duì)于不同的設(shè)備使用相同的操作系統(tǒng)將使它們之間的通信和共享信息更加容易。 該操作系統(tǒng)還將與公司的移動(dòng)用戶界面EMUI互連。由于Harmony
    的頭像 發(fā)表于 12-23 11:35 ?1633次閱讀

    Harmony OS網(wǎng)絡(luò)編程實(shí)驗(yàn)指南

    Harmony OS 網(wǎng)絡(luò)編程 實(shí)驗(yàn)指南,十分有用的入門(mén)實(shí)驗(yàn)指南。
    發(fā)表于 10-24 11:42 ?0次下載

    redis持久機(jī)制和如何實(shí)現(xiàn)持久

    File)。 RDB是Redis默認(rèn)采用的持久方式,它通過(guò)在指定時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入到磁盤(pán)的二進(jìn)制文件中,實(shí)現(xiàn)
    的頭像 發(fā)表于 12-05 10:02 ?588次閱讀

    鴻蒙開(kāi)發(fā)接口數(shù)據(jù)管理:【@ohos.data.preferences (首選項(xiàng))】

    首選項(xiàng)為應(yīng)用提供key-value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久輕量級(jí)數(shù)據(jù),并對(duì)其修改和查詢。數(shù)據(jù)
    的頭像 發(fā)表于 06-10 18:46 ?2078次閱讀

    harmony OS NEXT-基本介紹及DevcoStudiop基本使用

    #鴻蒙基本介紹及DevcoStudiop基本使用 1.認(rèn)識(shí)DevcoStudiop工作區(qū) 1.1認(rèn)識(shí)工作區(qū) 開(kāi)發(fā)節(jié)奏: 通過(guò)左側(cè)目錄找到對(duì)應(yīng)的應(yīng)用文件,在編輯區(qū)進(jìn)行代碼編寫(xiě),在右側(cè)看預(yù)覽效果 快捷鍵
    的頭像 發(fā)表于 03-26 16:48 ?255次閱讀
    <b class='flag-5'>harmony</b> <b class='flag-5'>OS</b> <b class='flag-5'>NEXT-</b>基本介紹及DevcoStudiop基本使用

    harmony OS NEXT-雙向數(shù)據(jù)綁定MVVM以及$$語(yǔ)法糖介紹

    保持同步的機(jī)制,當(dāng)數(shù)據(jù)發(fā)生變化時(shí),UI自動(dòng)更新;反之,當(dāng)用于通過(guò)UI代碼操作修改數(shù)據(jù)時(shí),數(shù)據(jù)模型也會(huì)同步更新,這種機(jī)制簡(jiǎn)化了開(kāi)發(fā),減少了手動(dòng)DOM或UI組件的代碼量,舉個(gè)簡(jiǎn)單的例子,比
    的頭像 發(fā)表于 04-29 16:52 ?94次閱讀