【Harmony】Preferences存储的封装使用

序言

轻量级数据存储功能通常用于保存应用的一些常用配置信息,并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中,这些文件可以持久化地存储在设备上。需要注意的是,应用访问的实例包含文件所有数据,这些数据会一直加载在设备的内存中,直到应用主动从内存中将其移除前,应用可以通过Preferences的API进行数据操作。

Preferences封装

java 复制代码
public class PreferencesUtil {

    private static volatile PreferencesUtil instance;

    private Context mContext;

    private Preferences preferences;

    private PreferencesUtil(Context context) {
        mContext = context;
    }

    public static PreferencesUtil getInstance(Context context) {
        if (instance == null) {
            synchronized (PreferencesUtil.class) {
                if (instance == null) {
                    instance = new PreferencesUtil(context);
                }
            }
        }
        return instance;
    }


    /**
     * 获取Preferences实例
     */
    public PreferencesUtil getPreferences() {
        if (preferences == null) {
            DatabaseHelper databaseHelper = new DatabaseHelper(mContext); // context入参类型为ohos.app.Context。
            String fileName = "user_pref"; // fileName表示文件名,其取值不能为空,也不能包含路径,默认存储目录可以通过context.getPreferencesDir()获取。
            preferences = databaseHelper.getPreferences(fileName);
        }
        return this;
    }


    public String getUserName() {
        if (preferences == null) {
            throw new IllegalStateException("没有获取Preference实例,需要检测代码");
        }
        return preferences.getString("user_name", "");
    }

    public void setUserName(String userName) {
        if (preferences == null) {
            throw new IllegalStateException("没有获取Preference实例,需要检测代码");
        }
        preferences.putString("user_name", userName);
        preferences.flush();
    }

}

使用

java 复制代码
PreferencesUtil.getInstance(getContext()).getPreferences().getUserName()
相关推荐
HUGu RGIN7 分钟前
MySQL--》如何在MySQL中打造高效优化索引
android·mysql·adb
Joseph Cooper3 小时前
Linux/Android 跟踪技术:ftrace、TRACE_EVENT、atrace、systrace 与 perfetto 入门
android·linux·运维
空中海3 小时前
安卓逆向03. 动态调试、抓包分析与 Frida Hook
android
一起搞IT吧4 小时前
相机Camera日志实例分析之二十:相机Camx【照片后置4800/5000/6400万拍照】单帧流程日志详解
android·嵌入式硬件·数码相机·智能手机
jinanwuhuaguo5 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
千码君20167 小时前
Trae:一些关于flutter和 go前后端开发构建的分享
android·flutter·gradle·android-studio·trae·vibe code
重生之我是Java开发战士10 小时前
【MySQL】事务 & 用户与权限管理
android·数据库·mysql
怣疯knight12 小时前
Windows不安装 Android Studio如何打包安卓软件
android·windows·android studio
ke_csdn12 小时前
从Java演变到Kotlin下的jet pack
android
wenzhangli713 小时前
在低代码设计中践行 Harness Engineering
android·低代码·rxjava