HarmonyOS-Service服务开发(一)

news/2024/7/21 10:25:09 标签: harmonyos, 华为

文章目录

      • 创建新项目
      • 启动Service
        • ets获取service的bundleName
      • DataAbility开发指导
        • 开发Data步骤
          • 创建Data

创建新项目

ServiceAbility开发指导

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
config.json中也有配置出现
在这里插入图片描述

harmonyos.com/cn/docs/documentation/doc-guides/fa-serviceability-0000001281480486#ZH-CN_TOPIC_0000001281480486__%E5%90%AF%E5%8A%A8service">启动Service

ets获取service的bundleName

项目的bundleName
在这里插入图片描述

service的bundleName
在这里插入图片描述
这里serviceAbility的bundleName也是项目的bundleName
这里的abilityName项目的bundleName+serviceAbility的Name组合而成

示例
比如我上图的示例是com.example.myapplicationcom.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")
//	},
//  ....
//}

在这里插入图片描述

harmonyos.com/cn/docs/documentation/doc-guides/fa-dataability-0000001333320993">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步骤
harmonyos.com/cn/docs/documentation/doc-guides/fa-dataability-0000001333320993#ZH-CN_TOPIC_0000001333320993__%E5%88%9B%E5%BB%BAdata">创建Data
  1. 需要实现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就可以联动起来了


http://www.niftyadmin.cn/n/5221171.html

相关文章

在CentOS上安装Nginx服务

配置EPEL源&#xff1a;首先&#xff0c;你需要安装EPEL源&#xff0c;这是一个为RHEL和CentOS提供额外软件包的存储库。你可以通过运行以下命令来安装EPEL源&#xff1a; sudo yum install -y epel-release sudo yum -y update安装Nginx&#xff1a;接下来&#xff0c;你可以…

2019年11月8日 Go生态洞察:庆祝Go语言十周年

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【TiDB】TiDB离线方式部署

目录 1 下载TiDB离线组件包 2 安装TiUP 3 合并离线包 4 TIDB 软件和硬件环境建议配置 5 TiDB环境与系统配置检查 6 生成集群初始化配置文件模板 7 执行部署命令 1 检查就能存在的潜在风险 2 手动修复风险 3 部署 TiDB 集群 8 查看TIUP管理的集群情况 9 检查部署的…

从零开始学习typescript——流程控制

前言 默认情况下&#xff0c;所有的代码都是从上到下&#xff0c;从左到右顺序执行的。 #mermaid-svg-zf9e2mz73WPBbIzH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zf9e2mz73WPBbIzH .error-icon{fill:#552222…

去掉浏览器打开第三方应用确认弹框

问题 通过Chrome或Edge浏览器打开第三方应用时&#xff0c;每次都会出现确认弹框&#xff0c;比较烦 解决 首先你要知道应用的协议名称&#xff0c;比如我这里是hicode Windows搜索框搜索&#xff0c;打开注册表编辑器 手动添加 如下图&#xff0c;到Chrome对应目录&#x…

吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合

产品&#xff1a;4块55寸OLED透明拼接屏 项目地点&#xff1a;南宁 项目时间&#xff1a;2023年11月 应用场景&#xff1a;吉利展厅 在2023年11月的南宁&#xff0c;吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…

Python语言学习笔记之三(字符编码)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 什么是字符编码 计算机从本质上来说只认识二进制中的0和1&#xff0c;字符编码(Character Encoding) 是一种将…

【uniapp】微信运行报错TypeError_ Cannot read property ‘FormData‘ of undefined

文章目录 一、报错详情&#xff1a;二、解决&#xff1a; 一、报错详情&#xff1a; 二、解决&#xff1a; npm install axios0.27.2 #或者 npm install axios1.3.4