HarmonyOS 鸿蒙Next 如何优雅的封装一个用户首选项工具类

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

描述: 如题,我想封装一个持久化工具类,可以理解为单例,我在每个需要存储的地方直接调用 UserInfoUtil.put(key,value) 需要获取值的地方调用 UserInfoUtil.(key) 如下是我的代码,如何完善呢? 这种单例,如果传入context 是否有内存泄漏问题呢?

const PREFERENCES_NAME = 'user.db'
let userPreference: preferences.Preferences | null = null

export class UserInfoUtil {
  private static delegate = new UserInfoUtil()

  private constructor() {
  }

  static getInstance() {
    return UserInfoUtil.delegate
  }

  async getPreferencesFromStorage() {
    let context = getContext(this) as Context
    userPreference = await preferences.getPreferences(context, PREFERENCES_NAME)
  }

  async putPreference(key: string, data: string) {
    if (userPreference !== null) {
      await userPreference.put(key, data)
      await userPreference.flush()
    }
  }

  async getStringPreference(key: string): Promise<string> {
    let result: string = ''
    if (userPreference !== null) {
      result = await userPreference.get(key, '') as string
      return result
    }
    return result
  }

  async getBooleanPreference(key: string): Promise<boolean> {
    let result: boolean = false
    if (userPreference !== null) {
      result = await userPreference.get(key, '') as boolean
      return result
    }
    return result
  }
} 

更多关于HarmonyOS 鸿蒙Next 如何优雅的封装一个用户首选项工具类的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
每个首选项文件对应一个实例,首选项是线程安全的,即使使用多线程,也能不会发生线程冲突。

您可参考官方封装样例:https://gitee.com/harmonyos/codelabs/tree/master/Preferences

该demo中是对Fruit实例进行封装,您可参考之对您的UserInfo实例进行封装。

更多关于HarmonyOS 鸿蒙Next 如何优雅的封装一个用户首选项工具类的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,封装用户首选项工具类可以通过以下步骤实现,主要利用Preferences API来存取用户数据。

  1. 创建工具类:定义一个静态类,用于封装与首选项相关的操作。

  2. 初始化Preferences:在工具类中,定义一个静态方法,用于获取Preferences实例。

  3. 提供存取方法:定义存取首选项数据的静态方法,如putStringgetStringputIntgetInt等,这些方法内部调用Preferences实例的相应方法。

示例代码:

import ohos.aafwk.ability.AbilityContext;
import ohos.data.preferences.Preferences;

public class UserPreferences {
    private static final String PREF_NAME = "user_prefs";
    private static Preferences preferences;

    static {
        preferences = new Preferences(AbilityContext.getApplicationContext(), PREF_NAME);
    }

    public static void putString(String key, String value) {
        preferences.putString(key, value);
    }

    public static String getString(String key, String defaultValue) {
        return preferences.getString(key, defaultValue);
    }

    // 类似地,添加putInt, getInt等方法
}

上述代码展示了如何封装一个基本的用户首选项工具类。该类提供静态方法,用于存取字符串类型的数据。你可以根据需求扩展该类,添加对其他类型数据的支持。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部