自学鸿蒙应用开发(22)- 在应用本地存储少量数据

面向对象思考

共 3031字,需浏览 7分钟

 ·

2021-01-28 21:46

鸿蒙系统中的轻量级偏好数据库主要用于保存应用的一些常用配置。数据存储在本地文件中,同时也加载在内存中的,所以访问速度更快,效率更高。

先看本文的演示视频:

首先是实现基本功能。

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


新书介绍

《实战Python设计模式》是作者最近出版的新书,拜托多多关注!

本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。




觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!




浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报