HarmonyOS:Preferences的封装使用与避坑

您所在的位置:网站首页 preferences HarmonyOS:Preferences的封装使用与避坑

HarmonyOS:Preferences的封装使用与避坑

2023-12-14 22:44| 来源: 网络整理| 查看: 265

目录 1 使用方式1.1 创建数据库1.2 读操作1.3 写操作 2 坑2.1 读写时context的选择2.2 应用重新启动后相关文件被删除 3 Preferences的封装   鸿蒙开发的Preferences是一种轻量级数据存储方式,类似于安卓开发中的SharedPreferences。信息在文件中是以key-value方式存储的,如下所示:

xxxxx 2018 男 xxxxxx xxxx xxxxx 计算机科学与技术 xxxxxx 1 使用方式 1.1 创建数据库

  通过数据库操作的辅助类可以获取到要操作的Preferences实例,用于进行数据库的操作:

DatabaseHelper databaseHelper = new DatabaseHelper(context); Preferences preferences = databaseHelper.getPreferences(name);

  name表示文件的名称,如果已经存在该文件则可以进行读操作,否则新建一个文件。

1.2 读操作 String x = preferences.getString(String key, int defValue);

  此外还有getInt和getFloat等多种方法。

1.3 写操作 preferences.putString(key, value).flushSync();

  其中flushSync将Preferences实例同步写入文件,此外还有异步写入:flush。

2 坑 2.1 读写时context的选择

  场景:我在MainAbility中创建了新的文件user_info,现在需要在UserAbility中进行访问,如果两个Ability中在创建Preferences实例时均采用getContext()方式,即:

DatabaseHelper databaseHelper = new DatabaseHelper(getContext()); Preferences preferences = databaseHelper.getPreferences(name);

  那么最终结果是:在UserAbility中不能访问到数据,这里需要注意的是:访问时传入的Context与创建时传入的Context必须一致!!   因此解决办法有两个:一是直接使用getApplicationContext(),二是在第三个Ability中定义一个公共静态Context。

Context context = getApplicationContext(); Context context = MAbility.mContext; 2.2 应用重新启动后相关文件被删除

  场景:在第一次启动应用时,输入了相关账号和登录密码,并利用Preferences将相关登录信息持久化地存储到设备中。第二次在该设备上运行同一应用时会判断是否存在该文件,如果存在就直接跳转到登录后的界面,否则需要重新登录。但调试时发现:每次重新启动应用后相关文件都被删除了。   原因:DevEco每次重新启动应用时都是卸载了之前的应用后重新部署,因此相关信息会被清除。   解决:   DevEco中打开Run->Edit Configuration,勾选Replace existing application选项。 在这里插入图片描述

3 Preferences的封装 package com.example.ncepu.Utils; import com.example.ncepu.MyApplication; import ohos.app.Context; import ohos.data.DatabaseHelper; import ohos.data.preferences.Preferences; public class PreferenceUtils { public static PreferenceUtils preferenceUtils = null; private static String name = "user_info"; public static PreferenceUtils getInstance() { if(preferenceUtils == null) { preferenceUtils = new PreferenceUtils(); } return preferenceUtils; } public Preferences getApplicationPref(Context context) { DatabaseHelper databaseHelper = new DatabaseHelper(context); return databaseHelper.getPreferences(name); } public void putString(String key, String value) { preferenceUtils.getApplicationPref(MyApplication.context).putString(key, value).flushSync(); } public String getString(String key, String defValue) { return preferenceUtils.getApplicationPref(MyApplication.context).getString(key, defValue); } }

使用:

PreferenceUtils.getInstance().putString("id", _id); String id = PreferenceUtils.getInstance().getString("id", "");

  Android开发中SharedPreferences的使用请参考:安卓利用SharedPreferences保存登录信息,防止重复登录



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3