树叶云鸿蒙OS教程:鸿蒙OS 访问Data

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

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

声明使用权限

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

"reqPermissions": [
    {
        "name": "com.example.myapplication5.DataAbility.DATA"
    }
]

创建 DataAbilityHelper

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

获取helper对象示例:

DataAbilityHelper helper = DataAbilityHelper.creator(this);

访问Data Ability

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

  • 访问文件

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

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

访问文件示例:

  // 读取文件描述符
  FileDescriptor fd = helper.openFile(uri, "r");
  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 之间的用户,并把结果打印出来,代码示例如下:

    DataAbilityHelper helper = DataAbilityHelper.creator(this);

     
    // 构造查询条件
    DataAbilityPredicates predicates = new DataAbilityPredicates();
    predicates.between("userId", 101, 103);

     
    // 进行查询
    ResultSet resultSet = helper.query(uri,columns,predicates);

     
    // 处理结果
    resultSet.goToFirstRow();
    do{
        // 在此处理ResultSet中的记录;
    }while(resultSet.goToNextRow());

  • insert()

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

    DataAbilityHelper helper = DataAbilityHelper.creator(this);

     
    // 构造插入数据
    ValuesBucket valuesBucket = new ValuesBucket();
    valuesBucket.putString("name", "Tom");
    valuesBucket.putInteger("age", 12);
    helper.insert(uri, valuesBucket);

  • batchInsert()

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

    DataAbilityHelper helper = DataAbilityHelper.creator(this);

     
    // 构造插入数据
    ValuesBucket[] values = new ValuesBucket[2];
    value[0] = new ValuesBucket();
    value[0].putString("name", "Tom");
    value[0].putInteger("age", 12);
    value[1] = new ValuesBucket();
    value[1].putString("name", "Tom1");
    value[1].putInteger("age", 16);
    helper.batchInsert(uri, values);

  • delete()

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

    DataAbilityHelper helper = DataAbilityHelper.creator(this);

     
    // 构造删除条件
    DataAbilityPredicates predicates = new DataAbilityPredicates();
    predicates.between("userId", 101,103);
    helper.delete(uri,predicates);

  • update()

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

    DataAbilityHelper helper = DataAbilityHelper.creator(this);

     
    // 构造更新条件
    DataAbilityPredicates predicates = new DataAbilityPredicates();
    predicates.equalTo("userId",102);

     
    // 构造更新数据
    ValuesBucket valuesBucket = new ValuesBucket();
    valuesBucket.putString("name", "Tom");
    valuesBucket.putInteger("age", 12);
    helper.update(uri, valuesBucket, predicates);

  • executeBatch()

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

    DataAbilityHelper helper = DataAbilityHelper.creator(abilityObj, insertUri);

     
    // 构造批量操作
    ValuesBucket value1 = initSingleValue();
    DataAbilityOperation opt1 = DataAbilityOperation.newInsertBuilder(insertUri).withValuesBucket(value1).build();
    ValuesBucket value2 = initSingleValue2();
    DataAbilityOperation opt2 = DataAbilityOperation.newInsertBuilder(insertUri).withValuesBucket(value2).build();
    ArrayList<DataAbilityOperation> operations = new ArrayList<DataAbilityOperation>();
    operations.add(opt1);
    operations.add(opt2);
    DataAbilityResult[] result = helper.executeBatch(insertUri, operations);

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/158706.html<

(0)
管理的头像管理
上一篇2025-03-16 23:19
下一篇 2025-03-16 23:20

相关推荐

  • 站群服务器一个IP放几个网站合适?,怎么选

    站群服务器一个IP放3-5个网站是大多数情况下的最佳平衡点,但具体数量需根据网站权重、内容质量及IP资源成本灵活调整,这个结论基于搜索引擎对同IP站点的关联判定逻辑,以及站群运营的长期实践,如果你刚接触站群,可能会纠结于IP分配,但核心原则是:不要让搜索引擎轻易识别出这些网站属于同一实体,站群IP分配的底层逻辑……

    2026-07-26
    0
  • DDoS攻击和CC攻击有什么区别,怎么防御?

    DDoS攻击和CC攻击最核心的区别在于攻击目标不同:DDoS攻击主要消耗网络带宽和基础设施资源,而CC攻击专门针对应用层逻辑,耗尽服务器CPU和数据库连接数,两者从原理到防御手段完全不同,攻防视角下的本质差异攻击目标:一个砸门,一个撬锁DDoS攻击(分布式拒绝服务)瞄准的是网络层和传输层,通过大量伪造数据包或畸……

    2026-07-26
    0
  • 服务器UEFI和Legacy启动模式有什么区别,哪个好

    UEFI(统一可扩展固件接口)是取代传统Legacy BIOS的现代启动标准,在服务器领域,UEFI凭借更快的启动速度、超过2TB的磁盘支持、安全启动(Secure Boot)以及丰富的预启动网络功能,成为主流服务器的默认配置;而Legacy BIOS作为兼容性模式,仅在需要运行老旧操作系统或特定硬件时保留,U……

    2026-07-26
    0
  • 站群服务器为什么比普通服务器贵,哪家性价比高?

    站群服务器之所以比普通服务器贵,核心在于其为了支撑大量独立站点同时稳定运行,在硬件隔离、独立IP资源池、高防御网络架构以及合规运维上投入了普通服务器数倍的成本,这些硬性支出直接反映在了最终定价上,硬件配置的“冗余”设计决定成本基线站群服务器与普通服务器最直观的差异体现在硬件层面,普通服务器往往面向单一应用或少量……

    2026-07-26
    0
  • 企业级服务器和普通服务器区别在哪?,怎么选性价比高

    前者为关键业务连续性与高并发场景设计,具备硬件冗余、故障自愈和全生命周期管理能力;后者面向基础应用,追求性价比与部署便捷性,硬件架构的底层差异企业级服务器从硬件选型就与普通服务器划清界限,CPU通常支持多路互联,内存频率更高且支持ECC纠错与RAS特性,存储控制器配备缓存保护与RAID加速,普通服务器往往采用单……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注