HarmonyOS-Service服务开发(一)
文章目录
- 创建新项目
- 启动Service
- ets获取service的bundleName
- DataAbility开发指导
- 开发Data步骤
- 创建Data
创建新项目
ServiceAbility开发指导





在config.json中也有配置出现

启动Service
ets获取service的bundleName
项目的
bundleName
service的
bundleName
这里serviceAbility的bundleName是也是项目的bundleName
这里的abilityName是项目的bundleName+serviceAbility的Name组合而成
示例
比如我上图的示例是com.example.myapplication和com.example.myapplication.ServiceAbility1
那可以这么来启动serviceAbility
onPageShow(){ //Page中的项目初始化(我们这里初始化就开始调用service)console.info("Index页面显示了")let promise = featureAbility.startAbility({want:{bundleName: "com.example.myapplication",abilityName: "com.example.myapplication.ServiceAbility1",},});
}//serviceAbility会先执行onStart生命周期
//service.ts(我是这样写serviceAbility的)
//export default {
// onStart() {// hilog.info(0x0000, 'testTag', '%{public}s', 'ServiceAbility onStart');
// console.info("serive1 start")
// },
// ....
//}

DataAbility开发指导


| 接口名 | 描述 |
|---|---|
| onInitialized | 在Ability初始化调用,通过此回调方法执行rdb等初始化操作。 |
| update | 更新数据库中的数据。 |
| query | 查询数据库中的数据。 |
| delete | 删除一条或多条数据。 |
| normalizeUri | 对uri进行规范化。一个规范化的uri可以支持跨设备使用、持久化、备份和还原等,当上下文改变时仍然可以引用到相同的数据项。 |
| batchInsert | 向数据库中插入多条数据。 |
| denormalizeUri | 将一个由normalizeUri生产的规范化uri转换成非规范化的uri。 |
| insert | 向数据中插入一条数据。 |
| openFile | 打开一个文件。 |
| getFileTypes | 获取文件的MIME类型。 |
| getType | 获取uri指定数据相匹配的MIME类型。 |
| executeBatch | 批量操作数据库中的数据。 |
| call | 自定义方法。 |
开发Data步骤
创建Data
- 需要实现Data中Insert、Query、Update、Delete接口的业务内容。保证能够满足数据库存储业务的基本需求。BatchInsert与ExecuteBatch接口已经在系统中实现遍历逻辑,依赖Insert、Query、Update、Delete接口逻辑,来实现数据的批量处理。
//data.ts(鸿蒙文档中的配置)
import hilog from '@ohos.hilog';
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) {//DataAbility初始化调用// hilog.info(0x0000, 'testTag', '%{public}s', 'DataAbility onInitialized');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)}
};
当你用以下调用
//service.ts(其中一个ability)
import hilog from '@ohos.hilog';import featureAbility from '@ohos.ability.featureAbility'
import ohos_data_ability from "@ohos.data.dataAbility"
import ohos_data_rdb from '@ohos.data.rdb'var urivar = "dataability://com.example.myapplication.DataAbility1"
var DAHelper = featureAbility.acquireDataAbilityHelper(urivar
);
var valuesBucket = {"name": "chentianyu"}
var da = new ohos_data_ability.DataAbilityPredicates()
var valArray =new Array("value1");
var cars = new Array({"batchInsert1" : "value1",});export default {insertOne(){DAHelper.insert(urivar,valuesBucket,(error, data)=>{console.log("DAHelper insert result: " + data)})},onStart() {// hilog.info(0x0000, 'testTag', '%{public}s', 'ServiceAbility onStart');console.info("serive1 start")this.insertOne()},onStop() {hilog.info(0x0000, 'testTag', '%{public}s', 'ServiceAbility onStop');},onCommand(want, startId) {hilog.info(0x0000, 'testTag', '%{public}s', 'ServiceAbility onCommand');},};
启动程序后出现一下日志(Log)

所以我们要看DataAbility接口开发
其实是
dataability:///+bundleName+Name不是dataability://+bundleName+Name,这bundleName和Name上面有讲(ets获取service的bundleName)
这样,PageAbility、ServiceAbility、DataAbility就可以联动起来了
相关文章:
HarmonyOS-Service服务开发(一)
文章目录 创建新项目启动Serviceets获取service的bundleName DataAbility开发指导开发Data步骤创建Data 创建新项目 ServiceAbility开发指导 在config.json中也有配置出现 启动Service ets获取service的bundleName 项目的bundleName service的bundleName 这里serviceAbil…...
FLASK博客系列4——再谈路由
最近好像拖更有点久了。抱歉抱歉~ 今天我们继续来聊聊路由(其实就是我上次偷懒剩下一点没讲完)。 通过上次的文章,我们基本了解了Flask中的路由,是不是比较简单呢?别急,今天来点猛料。 一、路由之HTTP方法绑…...
sql之left join、right join、inner join的区别
sql之left join、right join、inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下࿱…...
京东秒杀之秒杀详情
1 编写前端页面(商品详情) <!DOCTYPE html> <head><title>商品详情</title><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><script type"text/javascript" src&…...
mobaxterm 下载、安装、使用
下载 官网 MobaXterm free Xserver and tabbed SSH client for Windows 下载页面 MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download 点击下载 安装 双击安装 勾选协议 修改安装路径 ,等待安装完成 使用 启动 新建连接 输入主机用户名和密…...
办公技巧:Word中插入图片、形状、文本框排版技巧
目录 一、插入图片排版技巧 二、添加形状排版技巧 三、插入“文本框”排版技巧 我们平常在制作word时候经常会遇到插入选项卡下的图片、形状和文本框这三种情况下,那么如何使得Word文档当中添加这三个元素的同时,又能保证样式美观呢,今天小…...
apple macbook M系列芯片安装 openJDK17
文章目录 1. 查找openjdk版本2. 安装openjdk3. 多jdk之间的切换 在这里我们使用 brew 命令查找并安装。 1. 查找openjdk版本 执行:brew search openjdk,注意:执行命令后,如果得到的结果中没有红框内容,则需要更新一下…...
C语言——打印出所有的“水仙花数”
所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数,它的每个位上的数字的立方和等于它本身。例如,153是一个水仙花数,因为1^3 5^3 3^3 153。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>…...
<HarmonyOS第一课>应用程序框架 【课后考核】
【习题】应用程序框架 判断题 一个应用只能有一个UIAbility。错误(False)创建的Empty Ability模板工程,初始会生成一个UIAbility文件。正确(True)每调用一次router.pushUrl()方法,页面路由栈数量均会加1。错误(False) 单选题 API9及以上,r…...
自动驾驶学习笔记(十一)——高精地图
#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 高精地图 地图采集 底图制作 地图…...
HCIA-H12-811题目解析(2)
1、【单选题】 在以太网这种多点访问网络上PPPOE服务器可以通过一个以太网端口与很多PPPOE客户端建立起PPP连接,因此服务器必须为每个PPP会话建立唯一的会话标识符以区分不同的连接PPPOE会使用什么参数建立会话标识符? 2、【单选题】PPP协议定义的是OSI参考模型中…...
Docker-简介、基本操作
目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…...
Codeforces Round 911 (Div. 2)(C dp D gcd 分解+容斥 E tarjan+dp)
A.手玩题: 可以通过最后一个样例,如果是长度为3的连续O,直接在两边放就行,然后一直用中间的水填到其他地方 #include<bits/stdc.h> using namespace std; const int N 3e510,mod 998244353; #define int long long int n…...
给csgo游戏搬砖新手的十大建议
1、不要参与赌博性质的开箱和炼金,因为真的会上瘾,赚了还好,亏了你得哭。 2、实在想要玩饰品,直接去悠悠有品或者网易buff看价格,底价再砍10元,总会有人愿意卖的。 3、在steam上不要接受陌生人的好友申请…...
西南科技大学模拟电子技术实验一(常用电子仪器的使用及电子元器件的识别)预习报告
一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元 1、用万用表电阻挡测量实验板(箱)上电位器(可调电阻)的参数范围。 0~1kΩ电阻: 1k*0%=0 1k*100%=1k 所以范围为0~1k 0~10kΩ电阻: 10k*0%=0 10k*…...
回归分析例题(多元统计分析期末复习)
例一 例二 一元线性回归 解: (1)y a ^ \hat{a} a^ b ^ \hat{b} b^x,求线性回归方程即求出 a ^ \hat{a} a^和 b ^ \hat{b} b^ 而 b ^ \hat{b} b^ L x y L x x { {L_{xy}} \over {L_{xx}} } LxxLxy 所以我们首先需要计算 L x…...
Linux多路转接select,poll
文章目录 目录 文章目录 一、五种IO模型 1.阻塞IO: 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 二、高级IO的一些重要概念 1.同步通信和异步通信 2.阻塞和非阻塞 三、其他高级IO 四、非阻塞IO 1.fctl函数 2.实现setNoBlock函数,将文件描述符设置…...
如何轻松将 4K 转换为 1080p 高清视频
由于某些原因,你可能有一些 4K 视频,与1080p、1080i、720p、720i等高清视频相比,4K 视频具有更高的分辨率,可以给您带来更多的视觉和听觉享受。但是,播放4k 视频是不太容易的,因为超高清电视没有高清电视那…...
责任链模式 (Chain of Responsibility Pattern)
定义 责任链模式是一种行为型设计模式,用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求,从而减少请求的发送者和接收者之间的耦合。在责任链模式中,每个接收者包含对另一个接收者的引用,形成一条链。如果一个对…...
企业营销管理能够实现自动化吗?怎么做?
当今企业面临着越来越多的营销难题:如何有效培育潜在客户、如何提高营销活动的效果、如何优化营销资源的分配......企业的营销管理怎么做?或许CRM系统营销自动化会起到作用。 客户细分: 企业可以通过CRM的客户细分功能,根据客户…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...



