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

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

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

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-28 15:45 ? 次閱讀

import dataPreferences from '@ohos.data.preferences';
import bundleManager from '@ohos.bundle.bundleManager';

本地首選項數(shù)據(jù)的保存,利用key value

【使用要求】

DevEco Studio 3.1.1 Release
api 9

【使用示例】

1、app啟動時,從本地讀取數(shù)據(jù),并寫到內(nèi)存中去
注意:修改EntryAbility.ts的擴展名,改成ets,即:EntryAbility.ets

import MyPreferencesUtil from '../common/utils/MyPreferencesUtil'
export default class EntryAbility extends UIAbility {
     onCreate(want, launchParam) {
           MyPreferencesUtil.getData(this.context)
     }
 }

2、在修改內(nèi)存數(shù)據(jù)時,再調(diào)用一下保存方法
注意:開發(fā)工具DevEco studio中,默認每次啟動app是先卸載再安裝導(dǎo)致本地保存的數(shù)據(jù)丟失,需要改下配置每次運行都覆蓋安裝【entry-->edit config... --> keep application data】

import {MyPreferencesUtil,UserInfo} from '../common/utils/MyPreferencesUtil'
Button('測試').onClick(()= >{
     console.info('====當(dāng)前內(nèi)存信息 1 ',JSON.stringify(MyPreferencesUtil.getInstance()))
    MyPreferencesUtil.getInstance().mUserInfo.token = "測試測試"
    MyPreferencesUtil.saveData()
    console.info('====當(dāng)前內(nèi)存信息 2 ',JSON.stringify(MyPreferencesUtil.getInstance()))
})
export class MyPreferencesUtil {
  //日志過濾器
  private static readonly LOG: string = "====MyPreferencesUtil"
  //本地保存的文件名,和文件內(nèi)的key名這里打算共用一個就行
  private static readonly FILENAME_AND_KEY: string = 'FILENAME_AND_KEY'

  /** 本地要保存的用戶信息 */
  public mUserInfo: UserInfo = new UserInfo()
  // 本地要保存的環(huán)境信息
  public mEnvirInfo: EnvirInfo = new EnvirInfo()
  //=========單例模式,保存數(shù)據(jù)到內(nèi)存實例 start=========
  private static instance: MyPreferencesUtil;

  private constructor() {
  }
  /**
   * 通過單例,獲取本地映射到內(nèi)存中的實例
   * @returns 內(nèi)存中本地數(shù)據(jù)的實例
   */
  public static getInstance() {
    if (this.instance == null) {
      this.instance = new MyPreferencesUtil();
    }
    return this.instance;
  }

單例模式,保存數(shù)據(jù)到內(nèi)存實例

從磁盤本地讀取數(shù)據(jù)到內(nèi)存,賦值給instance

public static async getData(context: Context) {
    try {
      console.info(MyPreferencesUtil.LOG, 'getData');
      let file = await dataPreferences.getPreferences(context, MyPreferencesUtil.FILENAME_AND_KEY)
      console.info(MyPreferencesUtil.LOG, 'getData', 'file succ');
      let value = await file.get(MyPreferencesUtil.FILENAME_AND_KEY, JSON.stringify(MyPreferencesUtil.getInstance()))
      console.info(MyPreferencesUtil.LOG, 'getData', 'get succ', 'value:' + value);
      Object.assign(MyPreferencesUtil.getInstance(), JSON.parse(value.toString()))//將本地數(shù)據(jù) 拷貝到單例中去。
      console.info(MyPreferencesUtil.LOG, 'getData', 'assign succ');
      let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
      let data = await bundleManager.getBundleInfoForSelf(bundleFlags); //開始保存app的版本名稱和版本號
      MyPreferencesUtil.getInstance().mEnvirInfo.versionName = data.versionName
      MyPreferencesUtil.getInstance().mEnvirInfo.versionCode = data.versionCode
      console.info(MyPreferencesUtil.LOG, 'getData', 'set versionName and versionCode succ');
    } catch (e) {
      console.error(MyPreferencesUtil.LOG, 'getData', JSON.stringify(e));
    }
  }
鴻蒙OS開發(fā)更多內(nèi)容↓點擊HarmonyOSOpenHarmony技術(shù)
鴻蒙技術(shù)文檔開發(fā)知識更新庫gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在這。或+mau123789學(xué)習(xí),是v喔

搜狗高速瀏覽器截圖20240326151547.png

數(shù)據(jù)備份至磁盤本地

public static async saveData() {
    try {
      console.info(MyPreferencesUtil.LOG, 'saveData');
      let file = await dataPreferences.getPreferences(getContext(this), MyPreferencesUtil.FILENAME_AND_KEY)
      console.info(MyPreferencesUtil.LOG, 'saveData', 'file succ');
      await file.put(MyPreferencesUtil.FILENAME_AND_KEY, JSON.stringify(MyPreferencesUtil.getInstance()))
      console.info(MyPreferencesUtil.LOG, 'saveData', 'put succ');
      await file.flush()
      console.info(MyPreferencesUtil.LOG, 'saveData', 'flush succ');
    } catch (e) {
      console.error(MyPreferencesUtil.LOG, 'saveData', JSON.stringify(e));
    }
  }
}

用戶信息

export class UserInfo {

用戶登錄成功后要保存的token

public token: string = ""
}

環(huán)境信息

export class EnvirInfo {

首次啟動的彈窗是否點擊過“同意”。true:已同意,false:沒同意

public isAgreement: boolean = false

當(dāng)前app的版本名稱

public versionName: string = ''

當(dāng)前app的版本號

public versionCode: number = 0
}

審核編輯 黃宇

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

    關(guān)注

    126

    文章

    7901

    瀏覽量

    142959
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4314

    瀏覽量

    85846
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4391
收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙OS開發(fā)實例:【工具封裝-http請求】

    ;@ohos.promptAction';** **封裝HTTP接口請求,提供格式化的響應(yīng)信息輸出功能。 使用 DevEco Studio 3.1.1 Release 及以上版本,API 版本為 api 9 及以上
    的頭像 發(fā)表于 03-27 22:32 ?1368次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>工具</b><b class='flag-5'>類</b><b class='flag-5'>封裝</b>-http請求】

    HarmonyOS開發(fā)案例:【用戶首選項

    用戶首選項為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級數(shù)據(jù),常用于保存應(yīng)用配置信息、用戶偏好設(shè)置等。本篇Codelab將基于用戶首選項實現(xiàn)一個簡單的數(shù)據(jù)管理應(yīng)用,包含新增、查詢和刪除的功能。
    的頭像 發(fā)表于 04-18 15:34 ?949次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b>案例:【用戶<b class='flag-5'>首選項</b>】

    HarmonyOS開發(fā)實例:【手機備忘錄】

    基于用戶首選項,實現(xiàn)了備忘錄新增、更新、刪除以及查找等功能。
    的頭像 發(fā)表于 04-18 21:40 ?811次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【手機備忘錄】

    HarmonyOS開發(fā)案例:【首選項

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

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

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

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

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

    【HarmonyOS】鴻蒙圖片加載工具匯總

    ;一個在內(nèi)存中,另一個在內(nèi)部存儲中。3、鴻蒙圖片加載工具——picasso介紹用于 openharmony 的強大圖像下載和緩存庫。使用說明網(wǎng)格視圖 -從 url下載圖像訪問 Picasso 對象并從
    發(fā)表于 03-25 13:51

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

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

    鴻蒙 OS 應(yīng)用開發(fā)初體驗

    包 ArkTS:鴻蒙生態(tài)的應(yīng)用開發(fā)語言。 JS:JavaScript Previewer:預(yù)覽器 Toolchains:工具鏈 Create Project 配置工程 項目名稱、包名、
    發(fā)表于 11-02 19:38

    實例分析Symbian OS本地化技術(shù)研究

    未來無線互聯(lián)手持設(shè)備的新一代移動系統(tǒng)平臺,其目標(biāo)是把Symbian OS開發(fā)成為未來手機的產(chǎn)業(yè)標(biāo)準(zhǔn)。所以它對應(yīng)用程序的本地化提供了便利的條件和強有力的支持。Symbian OS內(nèi)置了U
    發(fā)表于 11-06 15:00 ?0次下載

    升級鴻蒙OS 2.0系統(tǒng),手機存儲空間變大

      按計劃,鴻蒙OS 2.0會在6月份開始大面積推送,華為Mate X2、Mate 40系列手機等將首批升級。此前已就流暢度、APP打開速度等,對比了鴻蒙OS 2.0
    的頭像 發(fā)表于 05-08 14:25 ?1.4w次閱讀

    SiP封裝成為更多應(yīng)用和市場的首選封裝選項

    系統(tǒng)級封裝 (SiP) 正迅速成為越來越多應(yīng)用和市場的首選封裝選項,引發(fā)了圍繞新材料、方法和工藝的狂熱活動。
    的頭像 發(fā)表于 10-28 16:16 ?999次閱讀

    鴻蒙OS開發(fā)實例:【工具封裝-emitter組件間通信】

    `MyEmitterUtil` 是一個針對 HarmonyOS 的事件驅(qū)動編程封裝,主要用于組件間的通信和數(shù)據(jù)傳遞。
    的頭像 發(fā)表于 03-27 22:13 ?681次閱讀

    鴻蒙OS開發(fā)實例:【工具封裝-頁面路由】

    import common from '@ohos.app.ability.common'; import router from '@ohos.router'封裝app內(nèi)的頁面之間跳轉(zhuǎn)、app與app之間的跳轉(zhuǎn)工具
    的頭像 發(fā)表于 03-28 16:16 ?917次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>工具</b><b class='flag-5'>類</b><b class='flag-5'>封裝</b>-頁面路由】

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

    首選項為應(yīng)用提供key-value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級數(shù)據(jù),并對其修改和查詢。數(shù)據(jù)存儲形式為鍵值對,鍵的類型為字符串型,值的存儲數(shù)據(jù)類型包括數(shù)字型、字符型、布爾型。
    的頭像 發(fā)表于 06-10 18:46 ?1668次閱讀