HarmonyOS-鸿蒙app开发 —基于java_数据管理_轻量级数据存储开发指导

HarmonyOS-鸿蒙app开发 —基于java_数据管理_轻量级数据存储开发指导

场景介绍

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

接口说明

轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括整型、字符串型、布尔型、浮点型、长整型、字符串型Set集合。

创建存储实例

读取指定文件,将数据加载到Preferences实例,即可创建一个存储实例,用于数据操作。

表1 轻量级数据存储实例创建接口

类名

接口名

描述

DatabaseHelper

DatabaseHelper(Context context)

DatabaseHelper是数据操作的辅助类。

DatabaseHelper

Preferences getPreferences(String name)

获取数据存储文件对应的Preferences单实例,用于数据操作。数据文件存放在由上下文指定的目录里,该路径会因指定不同的上下文存在差异。

存入数据

通过Put系列方法,可以增加或修改Preferences实例中的数据。

表2 轻量级偏好数据存入接口

类名

接口名

描述

Preferences

Preferences putInt(String key, int value)

设置Preferences实例中键对应的int类型的值。

Preferences

Preferences putString(String key, String value)

设置Preferences实例中键对应的String类型的值。

读取数据

通过调用Get系列方法,可以读取Preferences中的数据。

表3 轻量级数据读取接口

类名

接口名

描述

Preferences

int getInt(String key, int defValue)

获取键对应的int类型的值。

Preferences

float getFloat(String key, float defValue)

获取键对应的float类型的值。

数据持久化

通过执行flush方法,应用可以将缓存的数据再次写回文本文件中进行持久化存储。

表4 轻量级数据持久化接口

类名

接口名

描述

Preferences

void flush()

将Preferences实例异步写入文件。

Preferences

boolean flushSync()

将Preferences实例同步写入文件。

订阅数据变化

订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被回调。

表5 轻量级数据变化订阅接口

类名

接口名

描述

Preferences

void registerObserver(PreferencesObserver preferencesObserver)

订阅数据变化。

Preferences

void unRegisterObserver(PreferencesObserver preferencesObserver)

注销订阅。

Preferences.PreferencesObserver

void onChange(Preferences preferences, String key)

订阅者的回调方法,数据变化会触发回调该方法。

删除数据文件

通过调用以下两种接口,可以删除数据实例或对应的文件。

表6 轻量级数据存储删除接口

类名

接口名

描述

DatabaseHelper

boolean deletePreferences(String name)

将Preferences实例从内存中移除,同时删除其在设备上的持久化文件。

DatabaseHelper

void removePreferencesFromCache(String name)

仅将Preferences实例从内存中移除。

移动数据文件

表7 轻量级数据存储移动接口

类名

接口名

描述

DatabaseHelper

boolean movePreferences(Context sourceContext, String sourceName, String targetName)

移动数据持久化文件。

开发步骤

获取Preferences实例。

读取指定文件,将数据加载到Preferences实例,用于数据操作。

Context context = getContext(); // 数据文件存储路径:/data/data/{PackageName}/{AbilityName}/preferences。

// Context context = getApplicationContext(); // 数据文件存储路径:/data/data/{PackageName}/preferences。

DatabaseHelper databaseHelper = new DatabaseHelper(context); // context入参类型为ohos.app.Context。

String fileName = “test_pref”; // fileName表示文件名,其取值不能为空,也不能包含路径,默认存储目录可以通过context.getPreferencesDir()获取。

Preferences preferences = databaseHelper.getPreferences(fileName);

存入数据。

使用Preferences put方法保存数据到缓存的实例中。

preferences.putInt(“intKey”, 3);

preferences.putString(“StringKey”, “String value”);

读取数据。

使用Preferences get方法读取数据。

int value = preferences.getInt(“intKey”, 0);

数据持久化。

应用存入数据到Preferences实例后,可以通过flush或者flushSync方法将Preferences实例回写到文件中。

preferences.flush(); // 异步方法

bool result = preferences.flushSync(); // 同步方法

订阅数据变化。

应用订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被触发回调。不再需要PreferencesObserver时请注销。

private class PreferencesObserverImpl implements Preferences.PreferencesObserver {

 

@Override

public void onChange(Preferences preferences, String key) {

if (“intKey”.equals(key)) {

HiLog.info(LABLE, “Change Received:[key=value]”);

}

}

}

 

// 订阅数据变化

PreferencesObserverImpl observer = new PreferencesObserverImpl();

preferences.registerObserver(observer);

// 修改数据

preferences.putInt(“intKey”, 3);

// 触发订阅者回调方法执行

preferences.flush();

// 修改数据后,observer的onChange方法会被回调

// 注销订阅

preferences.unRegisterObserver(observer);

移除Preferences实例。

从内存中移除指定文件对应的Preferences单实例。移除Preferences单实例时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。

DatabaseHelper databaseHelper = new DatabaseHelper(context);

String fileName = “name”; // fileName表示文件名,其取值不能为空,也不能包含路径。

databaseHelper.removePreferencesFromCache(fileName);

删除指定文件。

使用deletePreferences方法从内存中移除指定文件对应的Preferences单实例,并删除指定文件及其备份文件、损坏文件。删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。删除后,数据及文件将不可恢复。

DatabaseHelper databaseHelper = new DatabaseHelper(context);

String fileName = “name”; // fileName表示文件名,其取值不能为空,也不能包含路径。

boolean result = databaseHelper.deletePreferences(fileName);

移动指定文件。

从源路径移动文件到目标路径。移动文件时,应用不允许再操作该文件数据,否则会出现数据一致性问题。

Context targetContext = getContext();

DatabaseHelper databaseHelper = new DatabaseHelper(targetContext);

String srcFile = “srcFile”; // srcFile表示源文件名或者源文件的绝对路径,不能为相对路径,其取值不能为空。当srcFile只传入文件名时,srcContext不能为空。

String targetFile = “targetFile”; // targetFile表示目标文件名,其取值不能为空,也不能包含路径。

Context srcContext = getApplicationContext();

boolean result = databaseHelper.movePreferences(srcContext, srcFile, targetFile);

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x