鸿蒙系统中的轻量级偏好数据库,主要用于保存应用的一些常用配置。数据存储在本地文件中,同时也加载在内存中的,所以访问速度更快,效率更高。
先看本文的演示视频:
首先是实现基本功能。
public class MainAbilitySlice extends AbilitySlice {
static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x12345, "MainAbilitySlice");
static final String preferenceFile = "preferences";
static final String counterKey = "ClickCounter";
int clickCounter = 0;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
readCounter();
Text hello = (Text)findComponentById(ResourceTable.Id_text_hello);
hello.setClickedListener(new Component.ClickedListener() {
public void onClick(Component component) {
clickCounter++;
try {
ohos.global.resource.ResourceManager resManager = getContext().getResourceManager();
String hello_msg = resManager.getElement(ResourceTable.String_hello_message).getString();
new ToastDialog(getContext())
.setText(hello_msg + "X" + clickCounter)
.setAlignment(LayoutAlignment.BOTTOM)
.show();
} catch (IOException | NotExistException | WrongTypeException e) {
e.printStackTrace();
}
}
});
代码第5行定义了一个用来表示点击次次数的clickCounter,其初值为0。在【你好,鸿蒙!!!】的点击事件处理代码的第14行会对clickCounter进行增量操作,当每次点击加1。
如果只是进行到这一步,每次程序重启之后还是会从1开始计数。为了每次操作的结果不会丢失,我们首先准备下面两个函数,分别用来从偏好数据库读出数据和向偏好数据库写入数据:
private void readCounter(){
DatabaseHelper databaseHelper = new DatabaseHelper(getContext());
Preferences preferences = databaseHelper.getPreferences(preferenceFile);
clickCounter = preferences.getInt(counterKey, 0);
}
private void writeCounter(){
DatabaseHelper databaseHelper = new DatabaseHelper(getContext());
Preferences preferences = databaseHelper.getPreferences(preferenceFile);
preferences.putInt(counterKey, clickCounter);
}
这两个方法使用使用的preferenceFile和conterKey分别用来表示偏好数据库的文件名和输出数据的键值,它们已经实现在第一段代码的第3行和第4行定义。这种做法在程序的规模变大时更易于管理,可读性更好。
方法准备好之后,我们可以向第一段代码第10行那样,在Slice类的onStart方法中调用readCounter,然后像下面代码中第3行一样,在Slice类的onStop方法中调用writeCounter。
public void onStop() {
writeCounter();
super.onStop();
// 打印一条日志
HiLog.info(label, "MainAbilitySlice.onStop!");
}
这样就保证了在程序每次退出时保存counter值,在每次启动时再将其读出。
需要注意的是:轻量级偏好数据库属于非关系型数据库,不宜存储大量数据,经常用于操作键值对形式数据的场景。
参考文档
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-preference-guidelines-0000000000030083