HarmonyOS 鸿蒙Next 谁用过首选项,能讲讲怎么用么

HarmonyOS 鸿蒙Next 谁用过首选项,能讲讲怎么用么

这样用不对吗,怎么没有相关函数,如图:

![cke_904.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/150/527/202/0070086000150527202.20231206081122.20527611932586376334782474144162:50001231000000:2800:70B80E2B70F899E7616BA6C16F31D68200280B88F5BC0CFF96FC9793D0F3E723.png)

更多关于HarmonyOS 鸿蒙Next 谁用过首选项,能讲讲怎么用么的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

了解了,谢谢各位的指点

更多关于HarmonyOS 鸿蒙Next 谁用过首选项,能讲讲怎么用么的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


// Storage.ets

Logger可以去掉,或者自己找找官方的源码。

storageKey可以定义一个自己喜欢的单词。

import dataPreferences from '@ohos.data.preferences';
import Logger from './Logger'
import { storageKey } from '../config/index'

let context = this.getContext();
let preference: dataPreferences.Preferences;
let loggerTag: string = '[FY-Storage]';

/**
 * 应用持久化轻量级数据(首选项)
 * @author xiong
 * @example await Storage.get('key')
 * @example await Storage.set('key', 'value')
 */
class Storage {
  /**
   * 调用getPreferences方法读取指定首选项持久化文件,将数据加载到Preferences实例,用于数据操作
   */
  private async getPreferencesFromStorage() {
    try {
      preference = await dataPreferences.getPreferences(context, storageKey+'.db');
    } catch (err) {
      Logger.error(loggerTag, `Failed to get preferences, Cause: ${err}`);
    }
  }

  /**
   * 获取持久化的数据
   * @param { String } key 需要获取的key值
   */
  public async get(key: string) {
    let fruit = '';
    if (!preference) {
      await this.getPreferencesFromStorage();
    }
    try {
      fruit = (await preference.get(storageKey+key, '')).toString();
    } catch (err) {
      Logger.error(loggerTag, `Failed to get value, Cause: ${err}`);
    }
    return fruit;
  }

  /**
   * 设置持久化数据
   * @param { String } key 需要保存的key值
   * @param { String } value 需要保存的value数据(如果是json数据,需要先转为string[JSON.stringify()])
   */
  public async set(key: string, value: string) {
    if (!preference) {
      await this.getPreferencesFromStorage();
    }
    try {
      await preference.put(storageKey+key, value);
    } catch (err) {
      Logger.error(loggerTag, `Failed to put value, Cause: ${err}`);
    }
    await preference.flush();
  }

  /**
   * 删除持久化数据
   * @param { String } key 需要删除key值
   */
  public async delete(key: string) {
    if (!preference) {
      await this.getPreferencesFromStorage();
    }
    try {
      await preference.delete(storageKey+key);
    } catch (err) {
      Logger.error(loggerTag, `Failed to put value, Cause: ${err}`);
    }
  }

  /**
   * 获取所有持久化数据
   */
  public async getAll() {
    if (!preference) {
      await this.getPreferencesFromStorage();
    }
    return preference.getAll();
  }

  /**
   * 检查Preferences实例是否包含名为给定Key的存储键值对
   * @param { String } key 需要检测的key值
   */
  public async has(key: string) {
    if (!preference) {
      await this.getPreferencesFromStorage();
    }
    return preference.has(storageKey+key);
  }

  /**
   * 清除此Preferences实例中的所有存储
   */
  public async clear() {
    if (!preference) {
      await this.getPreferencesFromStorage();
    }
    return preference.clear();
  }
}

export default new Storage();

你这个delete感觉没删除掉 就很奇怪,

不能这么调的,它是用到了Promise,所以:

dataPreferences.getPreferences(<common.AbilityStageContext>getContext(this), 'preferences').then((res) => {
  res.put('name', "OHOS");
  res.flush();
  let timeId = setTimeout(() => {
    clearTimeout(timeId);
    res.get("name", "Other", (_, val) => {
      console.log(JSON.stringify(val));
      this.message = val.valueOf() as string;
    })
  }, 2*1000);
})

你这preferences是Promise 当然没有对应函数了,你要取出值,参考官方文档:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-data-preferences-0000001427745052-V3

鸿蒙Next中的首选项(Preferences)是一种轻量级的数据存储方式,适用于保存应用的配置信息或用户偏好设置。首选项基于键值对存储,支持多种数据类型,如字符串、整型、布尔值等。使用首选项时,首先需要通过PreferencesHelper创建或获取一个首选项实例。例如,PreferencesHelper.getPreferences(context, "my_preferences")可以获取名为my_preferences的首选项实例。然后,可以使用putStringputIntputBoolean等方法存储数据,如preferences.putString("key", "value")。读取数据时,使用getStringgetIntgetBoolean等方法,如String value = preferences.getString("key", "default_value")。首选项数据会自动持久化到设备存储中,应用重启后数据仍可读取。需要注意的是,首选项适用于小规模数据存储,不适合存储大量数据或复杂结构。

回到顶部