在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

harmony OS NEXT-通過用戶首選項實現數據持久化

程奕紅 ? 來源:jf_34770892 ? 作者:jf_34770892 ? 2025-04-29 16:38 ? 次閱讀

# 鴻蒙通過用戶首選項實現數據持久化

## 1.1 場景介紹

用戶首選項為應用提供Key-Value鍵值型的數據處理能力,支持應用持久化輕量級數據,并對其修改和查詢。當用戶希望有一個全局唯一存儲的地方,可以采用用戶首選項來進行存儲。Preferences會將該數據緩存在內存中,當用戶讀取的時候,能夠快速從內存中獲取數據,當需要持久化時可以使用flush接口將內存中的數據寫入持久化文件中。Preferences會隨著存放的數據量越多而導致應用占用的內存越大,因此,Preferences不適合存放過多的數據,也不支持通過配置加密,適用的場景一般為應用保存用戶的個性化設置(字體大小,是否開啟夜間模式)等。

## 2.1 運作機制

用戶首選項為應用提供Key-Value鍵值型的數據處理能力,支持應用持久化輕量級數據,并對其修改和查詢。當用戶希望有一個全局唯一存儲的地方,可以采用用戶首選項來進行存儲。Preferences會將該數據緩存在內存中,當用戶讀取的時候,能夠快速從內存中獲取數據,當需要持久化時可以使用flush接口將內存中的數據寫入持久化文件中。Preferences會隨著存放的數據量越多而導致應用占用的內存越大,因此,Preferences不適合存放過多的數據,也不支持通過配置加密,適用的場景一般為應用保存用戶的個性化設置(字體大小,是否開啟夜間模式)等。

* 每個key的value的長度最大為8kb
* 創建首選項-倉庫的概念-應用可以有N個倉庫,一個倉庫中可以有N個key

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

## 3.1 接口說明

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

## 4.1 開發步驟

### 1.導入@kit.ArkData模塊。

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

### 2.獲取preference實例,拿到倉庫

`getPreferenceSync`接受兩個參數,其中一個參數是context,另一個參數是options

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

1. 在ability中區獲取 在`onWindowStageCreate`寫入這行代碼即可

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

2. 在UI界面去拿

```ts
getContext(this)
```

* `options` 是傳遞給 `preferences.getPreferencesSync()` 的配置對象,用于定義存儲實例的倉庫名稱、安全模式等關鍵屬性

```ts
const store = preferences.getPreferencesSync(MyPreferenceClass.context||getContext(),{
//拿到該名稱的倉庫,拿不到就會給你創建該名稱的倉庫,類似數據庫
name:'infoStore'
})
return store
```

### 3.創建增刪改的方法

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

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

### 4.測試代碼

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

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

build() {
//初始化默認值

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

}
```



審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2469

    瀏覽量

    43652
  • Harmony
    +關注

    關注

    0

    文章

    63

    瀏覽量

    2856
收藏 人收藏

    評論

    相關推薦

    鴻蒙OS開發實例:【工具類封裝-首選項本地存儲】

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

    HarmonyOS開發案例:【用戶首選項

    用戶首選項為應用提供Key-Value鍵值型的數據處理能力,支持應用持久輕量級數據,常用于保存
    的頭像 發表于 04-18 15:34 ?1225次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>用戶</b><b class='flag-5'>首選項</b>】

    HarmonyOS開發案例:【首選項

    基于HarmonyOS的首選項能力實現的一個簡單示例。
    的頭像 發表于 04-19 16:20 ?1546次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>首選項</b>】

    如何設置Xilinx ISE首選項11.x 12.x的默認值

    可能是一個新手問題,我們有一個配置允許不同版本的附加工具,如modelsim,synplicity。我們想知道是否有辦法告訴Xilinx默認使用什么。具體來說,我們有興趣設置以下值: 首選項
    發表于 11-15 11:29

    查看首選項未保存, 如何保存設置?

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

    Harmony os java api對應的實現代碼沒有開放嗎?

    Harmony os java api對應的實現代碼沒有開放嗎?
    發表于 11-30 18:06

    ESP8266/ARDUINO構建H找不到首選項怎么解決?

    大家好!我對運行 Arduino 核心的 ESP32 有一些扎實的經驗,并且一直在使用首選項庫來存儲,你猜對了,首選項,到該平臺上的 NVS。這是一個簡單而順利的過程。我正在嘗試將我的代碼移植到運行
    發表于 02-21 07:44

    HarmonyOS數據管理與應用數據持久(一)

    的形式存儲數據,廣泛用于應用中的關系型數據的處理,包括一系列的增、刪、改、查等接口,開發者也可以運行自己定義的SQL語句來滿足復雜業務場景的需要。 三. 通過用戶
    發表于 11-01 16:27

    關于MPLAB Harmony中項目恢復和備份選項的具體介紹

    MPLAB Harmony專輯 - 第5集 - MPLAB Harmony中的項目恢復和備份選項
    的頭像 發表于 07-08 00:33 ?3059次閱讀

    華為認為Harmony OS成熟需要5到10年

    在從電視到汽車娛樂系統的各種產品中無縫運行。華為高級全球產品經理彼得·高登(Peter Gauden)表示,對于不同的設備使用相同的操作系統將使它們之間的通信和共享信息更加容易。 該操作系統還將與公司的移動用戶界面EMUI互連。由于Harmony
    的頭像 發表于 12-23 11:35 ?1640次閱讀

    Harmony OS網絡編程實驗指南

    Harmony OS 網絡編程 實驗指南,十分有用的入門實驗指南。
    發表于 10-24 11:42 ?0次下載

    redis持久機制和如何實現持久

    File)。 RDB是Redis默認采用的持久方式,它通過在指定時間間隔內將內存中的數據集快照寫入到磁盤的二進制文件中,實現
    的頭像 發表于 12-05 10:02 ?590次閱讀

    鴻蒙開發接口數據管理:【@ohos.data.preferences (首選項)】

    首選項為應用提供key-value鍵值型的數據處理能力,支持應用持久輕量級數據,并對其修改和查詢。數據
    的頭像 發表于 06-10 18:46 ?2082次閱讀

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

    #鴻蒙基本介紹及DevcoStudiop基本使用 1.認識DevcoStudiop工作區 1.1認識工作區 開發節奏: 通過左側目錄找到對應的應用文件,在編輯區進行代碼編寫,在右側看預覽效果 快捷鍵
    的頭像 發表于 03-26 16:48 ?260次閱讀
    <b class='flag-5'>harmony</b> <b class='flag-5'>OS</b> <b class='flag-5'>NEXT-</b>基本介紹及DevcoStudiop基本使用

    harmony OS NEXT-雙向數據綁定MVVM以及$$語法糖介紹

    保持同步的機制,當數據發生變化時,UI自動更新;反之,當用于通過UI代碼操作修改數據時,數據模型也會同步更新,這種機制簡化了開發,減少了手動DOM或UI組件的代碼量,舉個簡單的例子,比
    的頭像 發表于 04-29 16:52 ?107次閱讀
    主站蜘蛛池模板: cao草棚视频网址成人 | 9久久99久久久精品齐齐综合色圆 | 亚洲日本三级 | 久久精品乱子伦观看 | 成人欧美一区二区三区视频 | 在线欧美色图 | 国产精品五月天 | 免费一区在线观看 | 淫操| 美女扒开尿口让男人捅 | 欧美高h| 国产69久久精品成人看 | 欧美啊片| 在线看你懂得 | 免费色视频网站 | 色拍视频 | 黄色三级网站 | 奇米影视777欧美在线观看 | 天天干人人干 | 国产经典三级在线 | 亚洲天堂网站在线 | 日韩精品亚洲一级在线观看 | 色婷婷亚洲十月十月色天 | 亚洲成人黄色网址 | 天天色综合三 | 中文字幕在线观看第一页 | 加勒比综合网 | 综合色婷婷| 国产小视频你懂的 | 女人张腿让男桶免费视频观看 | 日日草夜夜草 | 亚1州区2区3区4区产品乱码 | 大乳妇女bd视频在线观看 | 欧美日韩一区不卡 | 色中色综合| 午夜精品久久久久久久99 | 456成人 | 欧美高h | 天堂网站www天堂资源在线 | 久久频这里精品99香蕉久网址 | 女bbbbxxxx毛片视频丶 |