鸿蒙OS 访问Data

2020-09-18 10:09 更新

开发者可以通过 DataAbilityHelper 类来访问当前应用或其他应用提供的共享数据。 DataAbilityHelper 作为客户端,与提供方的 Data 进行通信。Data 接收到请求后,执行相应的处理,并返回结果。DataAbilityHelper 提供了一系列与 Data Ability 对应的方法。

下面介绍 DataAbilityHelper 具体的使用步骤。

声明使用权限

如果待访问的 Data 声明了访问需要权限,则访问此 Data 需要在配置文件中声明需要此权限。声明请参考权限申请字段说明

  1. "reqPermissions": [
  2. {
  3. "name": "com.example.myapplication5.DataAbility.DATA"
  4. }
  5. ]

创建 DataAbilityHelper

DataAbilityHelper为开发者提供了creator()方法来创建DataAbilityHelper实例。该方法为静态方法,有多个重载。最常见的方法是通过传入一个context对象来创建DataAbilityHelper对象。

获取helper对象示例:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(this);

访问Data Ability

DataAbilityHelper 为开发者提供了一系列的接口来访问不同类型的数据(文件、数据库等)。

  • 访问文件

DataAbilityHelper 为开发者提供了 FileDescriptor openFile (Uri uri, String mode)方法来操作文件。此方法需要传入两个参数,其中 uri 用来确定目标资源路径,mode 用来指定打开文件的方式,可选方式包含“r”(读), “w”(写), “rw”(读写),“wt”(覆盖写),“wa”(追加写),“rwt”(覆盖写且可读)。

该方法返回一个目标文件的 FD(文件描述符),把文件描述符封装成流,开发者就可以对文件流进行自定义处理。

访问文件示例:

  1. // 读取文件描述符
  2. FileDescriptor fd = helper.openFile(uri, "r");
  3. FileInputStream fis = new FileInputStream(fd);

  • 访问数据库

DataAbilityHelper 为开发者提供了增、删、改、查以及批量处理等方法来操作数据库。

方法 描述
ResultSet query(Uri uri, String[] columns, DataAbilityPredicates predicates) 查询数据库
int insert(Uri uri, ValuesBucket value) 向数据库中插入单条数据
int batchInsert(Uri uri, ValuesBucket[] values) 向数据库中插入多条数据
int delete(Uri uri, DataAbilityPredicates predicates) 删除一条或多条数据
int update(Uri uri, ValuesBucket value, DataAbilityPredicates predicates) 更新数据库
DataAbilityResult[] executeBatch(ArrayList<DataAbilityOperation> operations) 批量操作数据库

这些方法的使用说明如下:

  • query()

查询方法,其中 uri 为目标资源路径,columns 为想要查询的字段。开发者的查询条件可以通过 DataAbilityPredicates 来构建。查询用户表中 id 在 101-103 之间的用户,并把结果打印出来,代码示例如下:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(this);
  2. // 构造查询条件
  3. DataAbilityPredicates predicates = new DataAbilityPredicates();
  4. predicates.between("userId", 101, 103);
  5. // 进行查询
  6. ResultSet resultSet = helper.query(uri,columns,predicates);
  7. // 处理结果
  8. resultSet.goToFirstRow();
  9. do{
  10. // 在此处理ResultSet中的记录;
  11. }while(resultSet.goToNextRow());

  • insert()

新增方法,其中 uri 为目标资源路径,ValuesBucket 为要新增的对象。插入一条用户信息的代码示例如下:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(this);
  2. // 构造插入数据
  3. ValuesBucket valuesBucket = new ValuesBucket();
  4. valuesBucket.putString("name", "Tom");
  5. valuesBucket.putInteger("age", 12);
  6. helper.insert(uri, valuesBucket);

  • batchInsert()

批量插入方法,和 insert() 类似。批量插入用户信息的代码示例如下:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(this);
  2. // 构造插入数据
  3. ValuesBucket[] values = new ValuesBucket[2];
  4. value[0] = new ValuesBucket();
  5. value[0].putString("name", "Tom");
  6. value[0].putInteger("age", 12);
  7. value[1] = new ValuesBucket();
  8. value[1].putString("name", "Tom1");
  9. value[1].putInteger("age", 16);
  10. helper.batchInsert(uri, values);

  • delete()

删除方法,其中删除条件可以通过 DataAbilityPredicates 来构建。删除用户表中 id 在 101-103 之间的用户,代码示例如下:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(this);
  2. // 构造删除条件
  3. DataAbilityPredicates predicates = new DataAbilityPredicates();
  4. predicates.between("userId", 101,103);
  5. helper.delete(uri,predicates);

  • update()

更新方法,更新数据由 ValuesBucket 传入,更新条件由 DataAbilityPredicates 来构建。更新 id 为 102 的用户,代码示例如下:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(this);
  2. // 构造更新条件
  3. DataAbilityPredicates predicates = new DataAbilityPredicates();
  4. predicates.equalTo("userId",102);
  5. // 构造更新数据
  6. ValuesBucket valuesBucket = new ValuesBucket();
  7. valuesBucket.putString("name", "Tom");
  8. valuesBucket.putInteger("age", 12);
  9. helper.update(uri, valuesBucket, predicates);

  • executeBatch()

此方法用来执行批量操作。DataAbilityOperation 中提供了设置操作类型、数据和操作条件的方法,开发者可自行设置自己要执行的数据库操作。插入多条数据的代码示例如下:

  1. DataAbilityHelper helper = DataAbilityHelper.creator(abilityObj, insertUri);
  2. // 构造批量操作
  3. ValuesBucket value1 = initSingleValue();
  4. DataAbilityOperation opt1 = DataAbilityOperation.newInsertBuilder(insertUri).withValuesBucket(value1).build();
  5. ValuesBucket value2 = initSingleValue2();
  6. DataAbilityOperation opt2 = DataAbilityOperation.newInsertBuilder(insertUri).withValuesBucket(value2).build();
  7. ArrayList<DataAbilityOperation> operations = new ArrayList<DataAbilityOperation>();
  8. operations.add(opt1);
  9. operations.add(opt2);
  10. DataAbilityResult[] result = helper.executeBatch(insertUri, operations);
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号