购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.10 实战:DataAbilityHelper访问文件

本节演示如何通过DataAbilityHelper类访问当前应用的文件数据。采用Car设备类型,创建一个名为DataAbilityHelperAccessFile的应用。

5.10.1 创建DataAbility

在DevEco Studio中,可以通过图5-20所示方式创建一个Empty Data Ability。

图5-20 创建一个Empty Data Ability

根据图5-21所示引导,创建一个名为UserDataAbility的Data。

图5-21 创建一个名为UserDataAbility的Data

UserDataAbility代码如下:

在创建的时候就会自动生成了一些代码,包括基本的增删改查、打开文件、获取 URI 类型、获取文件类型、还有一个回调。再加上一个onStart方法,总共是9个。

UserDataAbility自动在配置文件中添加了相应的配置,内容如下:

从上述配置可以看出,type类型设置为data;uri为对外提供的访问路径,全局唯一;permis-sions为访问该Data Ability时需要申请的访问权限。

5.10.2 修改UserDataAbility

由于本示例只涉及文件,因此修改UserDataAbility时只需重写onStart()和openFile()方法,代码如下:

上述代码中:

(1)initFile()方法用于将源文件写入目标文件。this.getDataDir()方法可以获取数据目录,目标文件最终写入该目录下。

(2)HarmonyOS提供了一个ResourceManager资源管理器,通过该资源管理器可以方便地读取resouece目录下的资源文件。其中,RawFileEntry代表rawfile目录下的文件。可以通过rawFi-leEntry.openRawFile()方法方便地获取指定文件。

(3)在方法返回前,需要通过MessageParcel对FileDescriptor进行复制。

5.10.3 创建文件

在resouece目录的rawfile目录下创建图5-22所示的测试用文件。

图5-22 测试用文件

该文件的测试内容比较简单,就是一个用户的名字,代码如下:

5.10.4 修改MainAbilitySlice

修改MainAbilitySlice的onStart()方法,代码如下:

上述代码中:

(1)在Text中添加单击事件,触发访问文件的操作。

(2)getFile()方法用于访问文件。借助DataAbilityHelper类的openFile()方法,访问当前User-DataAbility提供的文件数据。

(3)FileUtils.getFileContent()方法用于将文件内容转为字符串,这样可以在日志中方便查看文件的具体内容。FileUtils工具类将在5.10.5小节介绍。

注意:上述代码中访问的URI与UserDataAbility在配置文件中的添加的URI基本一致,唯一的区别是上述代码中访问的URI用三个斜杠。

5.10.5 创建FileUtils类

FileUtils类是一个工具类,其中getFileContent()方法用于将文件内容转为字符串,代码如下:

5.10.6 运行

运行应用后,效果如图5-23所示。

图5-23 应用运行效果

单击文本Hello World,触发访问文件操作,可以看到控制台HiLog输出内容如下:

至此,DataAbilityHelper访问文件的示例演示完毕。 DOthadRjZPf3bPtlKndeV9zyruS90Qd5BSx3V81esm0KYucUK+9YTK0kyI6qSSq1



5.11 实战:DataAbilityHelper访问数据库

5.10节演示了如何通过DataAbilityHelper类访问当前应用的文件数据。本节将演示如何通过DataAbilityHelper类访问当前应用的数据库数据。采用Car设备类型,创建一个名为DataAbility-HelperAccessDatabase的应用。

5.11.1 创建DataAbility

在DevEco Studio中创建一个名为UserDataAbility的Data,如图5-24所示。

图5-24 创建一个名为UserDataAbility的Data

UserDataAbility初始化时代码如下:

UserDataAbility自动在配置文件中添加了相应的配置,内容如下:

从上述配置中可以看出,type类型设置为data;uri为对外提供的访问路径,全局唯一;permis-sions为访问该Data Ability时需要申请的访问权限。

5.11.2 初始化数据库

HarmonyOS关系型数据库对外提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的所有数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译SQL语句。初始化数据库,代码如下:

上述代码中:

(1)初始化了一个名为RdbStoreTest.db的数据库。

(2)创建了一个名为user_t的表结构。该表包含user_id、user_name和user_age三个字段,其中user_id为主键。

(3)初始化了RdbStore,用于方便后续关系型数据库(Relational DataBase,RDB)的管理。

5.11.3 重写query()方法

重写UserDataAbility的query()方法,代码如下:

上述代码中:

(1)DataAbilityUtils工具类将入参DataAbilityPredicates转换为RdbStore所能处理的RdbPre-dicates。

(2)通过RdbStore查询所需要的字段。

5.11.4 重写insert()方法

重写UserDataAbility的insert()方法,代码如下:

上述代码中,通过RdbStore插入表对应的数据;RdbStore插入数据后的返回值是该插入数据的主键,即user_id字段值。

5.11.5 重写update()方法

重写UserDataAbility的update()方法,代码如下:

上述代码中,DataAbilityUtils工具类将入参DataAbilityPredicates转换为RdbStore所能处理的RdbPredicates;通过RdbStore更新了对应条件的数据,更新后返回的value值代表更新的数量。

5.11.6 重写delete()方法

重写UserDataAbility的delete()方法,代码如下:

上述代码中,DataAbilityUtils工具类将入参DataAbilityPredicates转换为RdbStore所能处理的RdbPredicates;通过RdbStore删除了对应条件的数据,删除后返回的value值代表删除的数量。

5.11.7 修改MainAbilitySlice

修改MainAbilitySlice的onStart()方法,代码如下:

上述代码中:

(1)在Text中添加单击事件,触发访问数据库的操作。

(2)doDatabaseAction()方法用于执行数据库操作。借助DataAbilityHelper类的方法,访问当前UserDataAbility提供的数据库数据,分别执行了查询、插入、查询、更新、查询、删除和查询动作。

注意:上述代码中访问的URI与UserDataAbility在配置数据库中的添加的URI基本一致,唯一的区别是上述代码中访问的URI用三个斜杠。

5.11.8 运行

运行应用后,效果如图5-25所示。

图5-25 应用运行效果

单击文本Hello World,触发访问数据库操作,可以看到控制台HiLog输出内容如下:

从上述运行日志,可以验证程序的运行状态。

(1)执行查询,数据库中的数据为空。

(2)插入一条用户数据,该数据的user_id是101。

(3)执行查询,返回user_id是101的用户数据,其中user_name是Way Lau,user_age是33。

(4)执行更新操作。

(5)执行查询,可以看到user_id是101的用户数据,user_age被改为35。

(6)执行删除操作。

(7)执行查询,数据库中的数据为空。 DOthadRjZPf3bPtlKndeV9zyruS90Qd5BSx3V81esm0KYucUK+9YTK0kyI6qSSq1

点击中间区域
呼出菜单
上一章
目录
下一章
×