HarmonyOS4.0系统性深入开发24启动DataAbility

这篇具有很好参考价值的文章主要介绍了HarmonyOS4.0系统性深入开发24启动DataAbility。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DataAbility组件概述

DataAbility,即"使用Data模板的Ability",主要用于对外部提供统一的数据访问抽象,不提供用户交互界面。DataAbility可由PageAbility、ServiceAbility或其他应用启动,即使用户切换到其他应用,DataAbility仍将在后台继续运行。

使用DataAbility有助于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。DataAbility既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。

数据的存放形式多样,可以是数据库,也可以是磁盘上的文件。DataAbility对外提供对数据的增、删、改、查,以及打开文件等接口,这些接口的具体实现由开发者提供。

DataAbility组件配置

URI介绍

DataAbility的提供方和使用方都通过URI(Uniform Resource Identifier)来标识一个具体的数据,例如数据库中的某个表或磁盘上的某个文件。HarmonyOS的URI仍基于URI通用标准,格式如下:

HarmonyOS4.0系统性深入开发24启动DataAbility,HarmonyOS4.0系统性深入开发,harmonyos,windows,运维,华为,鸿蒙系统

  • scheme:协议方案名,固定为"dataability",代表Data Ability所使用的协议类型。
  • authority:设备ID。如果为跨设备场景,则为目标设备的ID;如果为本地设备场景,则不需要填写。
  • path:资源的路径信息,代表特定资源的位置信息。
  • query:查询参数。
  • fragment:可以用于指示要访问的子资源。

URI示例:

  • 跨设备场景:dataability://device_id/com.domainname.dataability.persondata/person/10
  • 本地设备:dataability:///com.domainname.dataability.persondata/person/1

说明

本地设备的"device_id"字段为空,因此在"dataability:“后面有三个”/"。

部分配置项介绍

与PageAbility类似,DataAbility的相关配置在config.json配置文件的"module"对象的"abilities"对象中,与PageAbility的区别在于"type"属性及"uri"属性。

表1 DataAbility的部分配置项说明

Json重要字段 备注说明
“name” Ability名称。
“type” UIAbility类型,DataAbility的类型为"data"。
“uri” 通信使用的URI。
“visible” 对其他应用是否可见,设置为true时,DataAbility才能与其他应用进行通信传输数据。

config.json配置样例

"abilities": [{  "srcPath": "DataAbility",  "name": ".DataAbility",  "icon": "$media:icon",  "srcLanguage": "ets",  "description": "$string:description_dataability",  "type": "data",  "visible": true,  "uri": "dataability://ohos.samples.etsdataability.DataAbility"}]

DataAbility支持的配置项及详细说明详见module对象内部结构。

DataAbility的生命周期

应用开发者可以根据业务场景重写生命周期相关接口。DataAbility生命周期接口说明见下表。

表1 DataAbility相关生命周期API功能介绍

接口名 描述
onInitialized?(info: AbilityInfo): void 在Ability初始化调用,通过此回调方法执行RDB等初始化操作。
update?(uri: string, valueBucket: rdb.ValuesBucket, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback): void 更新数据库中的数据。
query?(uri: string, columns: Array, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback): void 查询数据库中的数据。
delete?(uri: string, predicates: dataAbility.DataAbilityPredicates, callback: AsyncCallback): void 删除一条或多条数据。
normalizeUri?(uri: string, callback: AsyncCallback): void 对URI进行规范化。一个规范化的URI可以支持跨设备使用、持久化、备份和还原等,当上下文改变时仍然可以引用到相同的数据项。
batchInsert?(uri: string, valueBuckets: Array<rdb.ValuesBucket>, callback: AsyncCallback): void 向数据库中插入多条数据。
denormalizeUri?(uri: string, callback: AsyncCallback): void 将一个由normalizeUri生产的规范化URI转换成非规范化的URI。
insert?(uri: string, valueBucket: rdb.ValuesBucket, callback: AsyncCallback): void 向数据中插入一条数据。
openFile?(uri: string, mode: string, callback: AsyncCallback): void 打开一个文件。
getFileTypes?(uri: string, mimeTypeFilter: string, callback: AsyncCallback<Array>): void 获取文件的MIME类型。
getType?(uri: string, callback: AsyncCallback): void 获取URI指定数据相匹配的MIME类型。
executeBatch?(ops: Array, callback: AsyncCallback<Array>): void 批量操作数据库中的数据。
call?(method: string, arg: string, extras: PacMap, callback: AsyncCallback): void 自定义方法。

创建DataAbility

实现DataAbility中Insert、Query、Update、Delete接口的业务内容。保证能够满足数据库存储业务的基本需求。BatchInsert与ExecuteBatch接口已经在系统中实现遍历逻辑,依赖Insert、Query、Update、Delete接口逻辑,来实现数据的批量处理。

创建DataAbility的代码示例如下:

import featureAbility from '@ohos.ability.featureAbility'
import dataAbility from '@ohos.data.dataAbility'
import dataRdb from '@ohos.data.rdb'

const TABLE_NAME = 'book'
const STORE_CONFIG = { name: 'book.db' }
const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS book(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, introduction TEXT NOT NULL)'
let rdbStore: dataRdb.RdbStore = undefined

export default {
  onInitialized(abilityInfo) {
    console.info('DataAbility onInitialized, abilityInfo:' + abilityInfo.bundleName)
    let context = featureAbility.getContext()
    dataRdb.getRdbStore(context, STORE_CONFIG, 1, (err, store) => {
      console.info('DataAbility getRdbStore callback')
      store.executeSql(SQL_CREATE_TABLE, [])
      rdbStore = store
    });
  },
  insert(uri, valueBucket, callback) {
    console.info('DataAbility insert start')
    rdbStore.insert(TABLE_NAME, valueBucket, callback)
  },
  batchInsert(uri, valueBuckets, callback) {
    console.info('DataAbility batch insert start')
    for (let i = 0;i < valueBuckets.length; i++) {
      console.info('DataAbility batch insert i=' + i)
      if (i < valueBuckets.length - 1) {
        rdbStore.insert(TABLE_NAME, valueBuckets[i], (err: any, num: number) => {
          console.info('DataAbility batch insert ret=' + num)
        })
      } else {
        rdbStore.insert(TABLE_NAME, valueBuckets[i], callback)
      }
    }
  },
  query(uri, columns, predicates, callback) {
    console.info('DataAbility query start')
    let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
    rdbStore.query(rdbPredicates, columns, callback)
  },
  update(uri, valueBucket, predicates, callback) {
    console.info('DataAbilityupdate start')
    let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
    rdbStore.update(valueBucket, rdbPredicates, callback)
  },
  delete(uri, predicates, callback) {
    console.info('DataAbilitydelete start')
    let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates)
    rdbStore.delete(rdbPredicates, callback)
  }
};

启动DataAbility

更新时间: 2024-01-17 14:22

分享

添加收藏

启动DataAbility会获取一个工具接口类对象(DataAbilityHelper)。启动DataAbility的示例代码如下:文章来源地址https://www.toymoban.com/news/detail-822994.html

// 作为参数传递的URI,与config中定义的URI的区别是多了一个"/",有三个"/",具体原因详见。
import featureAbility from '@ohos.ability.featureAbility'

let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);

到了这里,关于HarmonyOS4.0系统性深入开发24启动DataAbility的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS4.0系统性深入开发34栅格布局(GridRow/GridCol)

    栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。主要优势包括: 提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数,可以方便地对页面元素进行定位和排版。

    2024年02月21日
    浏览(51)
  • 系统性认知网络安全

    前言: 本文旨在介绍网络安全相关基础知识体系和框架 目录 一.信息安全概述 信息安全研究内容及关系  信息安全的基本要求 保密性Confidentiality: 完整性Integrity: 可用性Availability: 二.信息安全的发展 20世纪60年代: 20世纪60-70年代: 20世纪90年代以后: 三.网络安全的攻防

    2024年02月08日
    浏览(44)
  • 【系统性】 循序渐进学C++

    一、环境配置 1.1.第一个程序(基本格式) ​ ​ 模板 1.2注释 1.3变量 ​ 意义:方便管理内存空间 ​ 方法:数据类型 变量名 = 数字; 1.4常量 1.5 1.6变量命名规则 二、数据类型 ​ 目的:给数据存分配合适的空间大小;避免资源浪费 2.1整形 ​ 2.2 sizeof 2.3浮点型 ​ fl

    2024年03月18日
    浏览(66)
  • 【基础类】—面向对象类系统性学习

    构造函数模拟一个类 ES6 Class声明 通过 new 实例化一个类 借助构造函数实现继承 缺点: Parent1的原型上的属性和方法,并没有被child所继承。 总结:只实现了部分继承,如果父类的属性都在构造函数里面,完全可以实现继承,如果父类的原型对象上还有方法或属性,那么子类

    2024年02月14日
    浏览(47)
  • 如何系统性的学习Python语言

    零基础同学的福音来了,如果你对Python语言的学习感兴趣,接下来可以由浅入深的了解下Python语言,哪怕你是零基础的小白也完全可以学会的,最后也会给大家放出学习和实例相结合的教程及方法,给到各位同学系统性的教学,最重要的是免费,可真谓是学生党们的福音呀。

    2024年02月10日
    浏览(45)
  • linux与windows系统性能测试

    # 一、Linux系统下的性能测试 ##### 可通过以下命令进行安装。 ##### 如果您使用CentOS、Redhat、Aliyun Linux等操作系统,运行以下命令     sudo yum install fio ##### 如果您使用Ubuntu或Debian操作系统,运行以下命令     sudo apt-get  update     sudo apt-get install fio ##### 下面提供一些通用的性能

    2024年04月17日
    浏览(46)
  • 【基础类】—前后端通信类系统性学习

    同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。 源:协议、域名和端口, 默认端口是80 三者有一个不同,即源不同,就是跨域 限制:不是一个源的文档,你没有权利去操作另一个源的文档,

    2024年02月13日
    浏览(38)
  • 金融——规避容易造成金融系统性风险的项目

    金融的关联性太强,容易造成很多社会问题, 改变,必须建立在有效规避风险之上 答: 答: 答:我暂时认为,他们都是未来。信用系统是一个美好的愿望,就像五六十年代理想的共产主义一样,要走的路还是很远,我个人是希望遥远的将来能够实现,那是多么美丽的未来,

    2024年01月20日
    浏览(57)
  • 系统性学习vue-组件及脚手架

    书接上文 Vue脚手架是Vue官方提供的标准化开发工具(开发平台) CLI: command line interface (命令行接口工具) 俗称脚手架 备注: 如果下载缓慢可以配置npm淘宝镜像: npm config set registry https://registry.npm.taobao.org Vue脚手架隐藏了所有webpack相关配置,弱项查看具体的webpack配置,请执行 vue ins

    2024年02月02日
    浏览(47)
  • 初识C语言——详细入门(系统性学习day4)

    目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍: 特点: 基本构成: 二、认识C语言程序 标准格式: 简单C程序: 三、基本构成分类详细介绍    (1) (2)数据类型 计算机中常用存储单位 数据类型的取值范围 打印输入类型 (3)常量和变量 常量的分类:

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包