前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自学鸿蒙应用开发(22)- 在应用本地存储少量数据

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

作者头像
面向对象思考
发布2021-02-25 16:15:42
1.2K0
发布2021-02-25 16:15:42
举报

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

先看本文的演示视频:

首先是实现基本功能。

代码语言:javascript
复制
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开始计数。为了每次操作的结果不会丢失,我们首先准备下面两个函数,分别用来从偏好数据库读出数据和向偏好数据库写入数据:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档