2024鸿蒙样题需要掌握的知识点

一、读取json格式文件为对象或数组,显示相应字段

  • 1、创建json文件的参数一致的类

  • 2、导入类、导入json文件

  • 3、循环渲染

import router from '@ohos.router'
//导入即对象
import books from 'resources/rawfile/book1.json'
import { Book } from '../model/Book'@Entry
@Component
struct Detail {build() {Column() {//展示所有的图书-->读取book文件ForEach(books.book, (item: Book) => {Text(item.bookName)})}.height('100%').width('100%')}
}

二、推送普通文本类型通知

        注意:测试的时候需要在模拟器中打开通知权限

//基础文本通知
import { notificationManager } from '@kit.NotificationKit';
// 描述通知的请求
let notificationRequest: notificationManager.NotificationRequest = {//id为通知的唯一标识,用于通讯的通知与取消id: 100,content: {//notificationContentType定义通知的类型notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,//normal定义普通文本类型通知的内容normal: {//title定义通知内容标题title: `通知内容标题`,//title定义通知内容详情text: '通知内容详情'}}
}
// 发送通知
notificationManager.publish(notificationRequest).then(()=>{console.info('publish success')
}).catch((err: Error) => {console.error(`publish failed,message is ${err}`);
});

        简化版

    notificationManager.publish({id: 1,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,normal: {title: '图书馆的通知',text: '这里是图书馆的通知'}}})

三、打开和关闭子窗口;鼠标拖拽子窗口;在子窗口页面中显示轮播图;点击轮播图,跳转到某图书详细信息页面。

  • 1、打开和关闭窗口

        ①、首先定义一个类

import { window } from '@kit.ArkUI'class MyWindows {WindowStage: window.WindowStage | null = nullSubWindow: window.Window | null = null//打开小窗async show() {if (this.WindowStage == null) {console.log('testTag', '发生错误,无法打开小窗')} else {this.SubWindow = await this.WindowStage.createSubWindow('xiejiarui')//窗口位置this.SubWindow.moveWindowTo(440, 550)//窗口大小this.SubWindow.resize(800, 1500)}this.SubWindow?.setUIContent("pages/Small_window", () => {(this.SubWindow as window.Window).showWindow()})}//关闭小窗close() {this.SubWindow?.destroyWindow((err) => {if (err) {console.log("testTag", '发生错误 无法关闭小窗')} else {console.log('testTag', '成功关闭小窗')}})}
}export default new MyWindows()

        ②、在EntryAbility中初始化

export default class EntryAbility extends UIAbility {async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {windowStage.loadContent('pages/Index', (err) => {……}); //小窗let windowsClass = await windowStage.getMainWindow()let name: Array<"status" | "navigation"> = []windowsClass.setWindowSystemBarEnable(name)MyWindows.WindowStage = windowStage}

        ③、在需要打开小窗的地方调用

//注意:需要导入MyWindows的ets文件
Button('点击弹出小窗').onClick(() => {MyWindows.ShowSubWindows()
})

        ④、在需要关闭小窗的地方调用

//注意:需要导入MyWindows的ets文件
Button('点击关闭窗口').onClick(()=>{MyWindows.destroySubWindow()})

四、使用视频组件显示视频文件。

//视频控制器
controller: VideoController = new VideoController()
Video({ src: this.book.videoPath, controller: this.controller }).width('85%').height(180).autoPlay(true)


五、用户首选项或关系型数据库进行数据持久化存储。

        1、通过用户首选项实现数据持久化

                ⑴封装用户首选项工具类

import { preferences } from "@kit.ArkData"class PreferencesUtil {//创建一个变量来保存preferences的实例private pref: preferences.Preferences | null = null//获取Preferences实例createPreferences(context: Context) {//获取preferences的实例【第一个参数是context(应用场下文),第二个参数是实例的名称】preferences.getPreferences(context, 'shop_preferences').then((object) => {//成功时会返回preferences实例this.pref = objectconsole.log('testTag', '成功获取preferences实例')}).catch(() => {console.log('testTag', '获取preferences实例失败')})}//将数据写入preferences实例async writePreferenceValue(key: string, value: preferences.ValueType) {//判断一下preferences是否实例化if (!this.pref) {return}try { //实例化后,调用put方法来写入数据【第一个值传入要写入的string类型的Key,第二个值是要写入的数据】await this.pref.put(key, value)//通过flash方法将preferences实例持久化await this.pref.flush()console.log('testTag,写入数据成功')} catch (e) {console.log('testTag,写入数据失败')}}//读数据的操作//获取键对应的值async readPreferenceValue<T extends preferences.ValueType>(key: string, defaultValue: T) {//判断一下preferences是否实例化if (!this.pref) {console.log('testTag, preferences未实例化,返回默认值')return defaultValue // 未实例化时返回默认值}try { //实例化后,调用get方法获取数据【第一个值传入要获取的string类型的Key,第二个值表示默认值】let value = await this.pref.get(key, defaultValue) as Tconsole.log('testTag,读取数据成功')return value} catch (e) {console.log('testTag,写入数据失败')return defaultValue // 出错时返回默认值}}
}export default new PreferencesUtil()

                ⑵初始化用户首选项

import PreferencesUtil from '../utils/PreferencesUtil'const DOMAIN = 0x0000;export default class EntryAbility extends UIAbility {async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {…… ……
    //实例化preferencesPreferencesUtil.createPreferences(this.context)}
}

                ⑶使用用户首选项

Button('记录数据').onClick(()=>{PreferencesUtil.writePreferenceValue("姓名","RAY")})
Button('读取数据').onClick(async ()=>{this.message=await PreferencesUtil.readPreferenceValue("姓名","name")})
Text(`数据为:${this.message}`)

        2、通过关系型数据库实现数据库持久化

                ①、定义类

// 抽象的Rdb类,没有业务属性,可以基于这个类创建带有业务属性的一张或多张表export default class Rdb {// 管理关系数据库(RDB)方法属性 类型是RdbStore 或 null//通过getRdb方法获取到的,没获取之前可能是nullprivate rdbStore: relationalStore.RdbStore | null = null;// 数据库表名称private tableName: string;// 创建SQLite表的语句字符串private sqlCreateTable: string;// 列名字段的数组,在实例化是具体传入private columns: Array<string>;// 实例化 Rdb 对象时,初始化表名、创建表的语句、列名字段的数组constructor(tableName: string, sqlCreateTable: string, columns: Array<string>) {this.tableName = tableName;this.sqlCreateTable = sqlCreateTable;this.columns = columns;}// 获取操作数据库RdbStore对象的方法,接收一个回调函数//开发者自己定义的,getRdbStore(callback: Function = () => {}) {// 如果 回调函数为空、或undefined 打印错误日志,退出方法if (!callback || typeof callback === 'undefined' || callback === undefined) {console.info('testTag', 'getRdbStore() has no callback!');return;}// 如果属性rdbStore 不为空,说明操作对象已经初始化,打印日志,执行回调函数,退出方法if (this.rdbStore !== null) {console.info('testTag', 'The rdbStore exists.');callback();return}// 执行到此处,说明回调函数不为空,且rdbStore尚未初始化,接下来要进行初始化/*获取RdbStore接口的方法,接收三个参数context  :应用上下文config   :数据库配置callback :回调函数,异步返回rdb对象*/// 获取上下文let context: Context = getContext(this) ;relationalStore.getRdbStore(context, CommonConstants.STORE_CONFIG, (err, rdb) => {// 如果发生错误,打印日志,退出方法if (err) {console.error('testTag', `gerRdbStore() failed, err: ${err}`);return;}// 如果没有错误,为rdbStore属性赋值为rdbthis.rdbStore = rdb;// 执行Sql语句,使用创建表的字符串this.rdbStore.executeSql(this.sqlCreateTable);// 打印日志console.info('testTag', 'getRdbStore() finished.');// 执行方法入参的回调函数callback();});}// 插入数据的方法,入参为表格的存储键值对,和回调函数//data:插入的数据是什么insertData(data: relationalStore.ValuesBucket, callback: Function = () => {}) {// 如果回调函数为空、或undefined 打印错误日志,退出方法if (!callback || typeof callback === 'undefined' || callback === undefined) {console.info('testTag', 'insertData() has no callback!');return;}// 创建结果标识局部变量,默认为false//方便在是使用方法是进行判断let resFlag: boolean = false;// 创建存储键值对局部变量,默认为入参dataconst valueBucket: relationalStore.ValuesBucket = data;// 如果rdbStore存在则执行if (this.rdbStore) {// 执行rdbStore的插入数据方法,入参为表名、存储键值对、异步回调函数this.rdbStore.insert(this.tableName, valueBucket, (err, ret) => {if (err) {// 如果发生错误,打印日志,执行入参的回调函数,并传入结果标识 falseconsole.error('testTag', `insertData() failed, err: ${err}`);callback(resFlag);return;}// 如果操作成功,打印日志,执行回调函数,并传入返回ret(新插入这行的ID)console.info('testTag', `insertData() finished: ${ret}`);//所以可以在后面为新插入的行id进行赋值callback(ret);});}}// 删除数据的方法,接收谓词和回调函数两个参数//谓词:我要删除什么deleteData(predicates: relationalStore.RdbPredicates, callback: Function = () => {}) {// 如果回调函数为空、或undefined 打印错误日志,退出方法if (!callback || typeof callback === 'undefined' || callback === undefined) {console.info('testTag', 'deleteData() has no callback!');return;}// 创建结果标识局部变量,默认为falselet resFlag: boolean = false;// 如果rdbStore存在则执行if (this.rdbStore) {// rdbStore的删除方法,入参为谓词、异步回调函数this.rdbStore.delete(predicates, (err, ret) => {// 如果发生错误,打印日志,执行入参的回调函数,并传入结果标识 falseif (err) {console.error('testTag', `deleteData() failed, err: ${err}`);callback(resFlag);return;}// 如果删除成功,打印日志,执行回调函数,并传入返回ret(行ID)console.info('testTag', `deleteData() finished: ${ret}`);callback(!resFlag);});}}// 更新数据的方法,接收三个参数:谓词、存储键值对、回调函数updateData(predicates: relationalStore.RdbPredicates, data: relationalStore.ValuesBucket, callback: Function = () => {}) {// 如果回调函数为空、或undefined 打印错误日志,退出方法if (!callback || typeof callback === 'undefined' || callback === undefined) {console.info('testTag', 'updateDate() has no callback!');return;}// 创建结果标识局部变量,默认为falselet resFlag: boolean = false;// 创建存储键值对局部变量,默认为入参dataconst valueBucket: relationalStore.ValuesBucket = data;// 如果rdbStore存在则执行if (this.rdbStore) {// rdbStore的更新方法,接收三个参数,存储键值对、谓词、回调函数this.rdbStore.update(valueBucket, predicates, (err, ret) => {if (err) {// 如果发生错误,打印日志,执行入参的回调函数,并传入结果标识 falseconsole.error('testTag', `updateData() failed, err: ${err}`);callback(resFlag);return;}// 如果更新成功,打印日志,执行回调函数,并传入返回成功的标识 trueconsole.info('testTag', `updateData() finished: ${ret}`);callback(!resFlag);});}}// 查询数据的方法,接收两个参数,谓词、回调函数query(predicates: relationalStore.RdbPredicates, callback: Function = () => {}) {// 如果回调函数为空、或undefined 打印错误日志,退出方法if (!callback || typeof callback === 'undefined' || callback === undefined) {console.info('testTag', 'query() has no callback!');return;}// 如果rdbStore存在则执行if (this.rdbStore) {// rdbStore的查询方法,接收三个参数,谓词,数据库列名的数组,异步回调函数this.rdbStore.query(predicates, this.columns, (err, resultSet) => {// 如果发生错误,打印日志,退出方法if (err) {console.error('testTag', `query() failed, err:  ${err}`);return;}// 如果没有错误,打印日志console.info('testTag', 'query() finished.');// 执行入参的回调函数,传入查询结果callback(resultSet);// 关闭结果集resultSet.close();});}}
}

                ②、导入类、进行调用



六、在页面跳转时进行传值

  • 1、字符串类型

//传值

router.pushUrl({url:'pages/Detail',params:{libraryName:'图书馆'}
})

//接收(注意类型)

const Params: string = router.getParams()as string
const libraryName:String=Params['libraryName']
  • 2、对象类型

//传值

router.pushUrl({url: 'pages/Detail',params: {name : '',book : ''}
})

//接收

        //Entry外定义类

class library {name: String = ''book: String = ''
}

        //build前接收值

const Params: library = router.getParams()as library
const name:String=Params.name
const book:String=Params.book

七、使用华为云,创建云函数;并根据云函数返回的接口地址,使用http进行网络数据获取。

        1、创建云函数

        然后点击刚刚创建的触发器,点击修改,按需修改(Path等),点击修改成功

        然后找到刚刚的API,在总览中复制API URL

        2、调用云函数

//注意:需要导入http包(import http from '@ohos.net.http')
let data=await http.createHttp().request('刚刚复制的API URL')
console.log("testTag","调用华为云的云函数,返回的值是",`${data.result}`)

八、打开手机拨号界面。

//调用查询能力接口
let isSupport = call.hasVoiceCapability()
//如果有能力拨打电话
if (isSupport) {//向10086拨打电话call.makeCall("10086",(err)=>{if (err) {//拨打电话的时候发生错误,打印日志console.log('testTag',"拨打电话失败")}else {//拨打电话成功,打印日志console.log('testTag',"拨打电话成功")}})
}

简化版

call.makeCall("10086")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94729.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QML Charts组件之坐标轴示例

目录引言&#x1f3af; 运行效果预览&#x1f4da; 相关系列文章五种坐标轴详解与代码实践1. 数值坐标轴&#xff08;ValueAxis&#xff09;示例代码说明2. 对数坐标轴&#xff08;LogValueAxis&#xff09;示例代码说明3. 日期坐标轴&#xff08;DateTimeAxis&#xff09;示例…

Vue3+ElementPlus倒计时示例

按钮文字默认显示“开始倒计时”当点击按钮时&#xff0c;显示正在倒计时(倒计时数字)倒计时结束按钮显示“开始倒计时” 倒计时逻辑 Hooks 函数 hooks/useCountDown.js /*** hooks函数&#xff1a;函数是用于封装和复用组件逻辑的一种机制* 定义&#xff1a;Hooks 是一种在不使…

docker 的网络

1.查看docker里面的网络docker network ls 2.查看某个 Docker 网络的 网关 IP 和 子网段docker network inspect <网络名或ID>

数据挖掘,到底是在挖掘什么?

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【车载开发系列】CS+ for CC开发环境IDE

【车载开发系列】CS for CC开发环境IDE 【车载开发系列】CS for CC开发环境IDE【车载开发系列】CS for CC开发环境IDE一. 引言二. IDE安装三. 新建工程四. 堆与栈内存的设置1&#xff09;栈内存设置2&#xff09;堆内存设置一. 引言 瑞萨单片机开发环境有三种&#xff1a;estu…

如何将视频从安卓设备传输到Mac?

你是否想要创建备份、释放存储空间&#xff0c;或者分享难忘时刻&#xff1f;你可能想要轻松地将视频从安卓设备复制到MacBook。在本篇关于“如何将视频从安卓传输到Mac”的指南中&#xff0c;我们将介绍五种智能方法&#xff0c;帮助你无缝地复制视频。从传统的WiFi连接方法到…

MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术

&#x1f50d; MyBatis 初识&#xff1a;框架定位与核心原理——SQL 自由掌控的艺术 文章目录&#x1f50d; MyBatis 初识&#xff1a;框架定位与核心原理——SQL 自由掌控的艺术&#x1f9e9; 一、为什么需要 ORM 框架&#xff1f;&#x1f4a1; JDBC 的痛点&#xff1a;原始时…

谷粒商城项目-P6环境-使用vagrant快速创建Linux虚拟机

1.虚拟机 虚拟机使用virtualbox,我使用的是6.0.12版本 2.创建linux系统 使用vagrant 验证是否安装完成vagrant 在cmd使用vagrant看看有没有命令提示 创建虚拟机 在cmd使用vagrant init centos/7创建 创建完成后使用vagrant up启动虚拟容器 启动完成后&#xff0c;使用va…

人形机器人的“奥运会“:宇树科技领跑,动捕技术成训练关键

近年来&#xff0c;人工智能、仿生学和运动控制技术的突破性发展&#xff0c;正推动人形机器人成为全球科技竞争的新焦点。各国政府、科研机构和企业加速布局医疗、救援、服务等领域的应用场景。在此背景下&#xff0c;首届世界人形机器人大会应运而生并于近日圆满落幕。此次运…

20250823给荣品RD-RK3588开发板刷Rockchip原厂的Android14【EVB7的V10】时调通AP6275P的WIFI

20250823给荣品RD-RK3588开发板刷Rockchip原厂的Android14【EVB7的V10】时调通AP6275P的WIFI 2025/8/23 17:02【我是先将这个DTSI文件中的代码块直接搬到rk3588-evb7-lp4.dtsi中&#xff0c;然后就可以上网了。接着就微调到最终版本&#xff01;】 E:\RD-RK3588_Android13\kern…

Mac 菜单栏多合一工具自荐:FancyTool

鉴于本人特别喜欢花里花哨的菜单栏&#xff0c;但又不想开机自启太多软件&#xff0c;所以自己开发了一个新的、轻量的&#xff0c;有点花里胡哨但又有些实用功能的多合一工具&#xff1a;[ FancyTool ]&#xff0c; 感兴趣的朋友可以点击链接下载使用。 我承认&#xff0c;这…

用AI生成的一个BadgerDB的管理工具

badgerDB 是一款由 Dgraph Labs 开发的高性能、嵌入式键值&#xff08;Key-Value&#xff09;数据库&#xff0c;基于 LSM-Tree&#xff08;Log-Structured Merge Tree&#xff09;存储引擎设计&#xff0c;主打低延迟、高吞吐量和轻量级部署&#xff0c;广泛用于需要本地持久化…

Spring-- Spring Security(一)

1. 概念Spring Security&#xff1a;Spring 提供的安全框架&#xff0c;用于保护应用程序免受未授权访问&#xff0c;提供认证、授权、CSRF 防护等功能。核心功能&#xff1a;认证&#xff08;Authentication&#xff09;&#xff1a;确认用户身份&#xff08;登录过程&#xf…

某电器5G智慧工厂网络建设全解析

随着工业4.0的全面推进和智能制造需求的不断增长&#xff0c;5G技术已成为智慧工厂建设的核心驱动力。某电器工厂计划通过构建高效可靠的5G网络&#xff0c;结合智能组网设备与工业物联网技术&#xff0c;实现智能化转型&#xff0c;提升生产运营效率。本文将详细解析该5G智慧工…

PyCharm 加载不了 conda 虚拟环境,不存在的

#工作记录前言在开发过程中&#xff0c;PyCharm 无法加载 Conda 虚拟环境是常见问题。在不同情况下&#xff0c;“Conda 可执行文件路径”的指定可能会发生变化&#xff0c;不会一尘不变&#xff0c;需要灵活处置。以下是一系列解决此问题的经验参考。检查 Conda 安装与环境创建…

xml中resultMap 的用法,数据库 JSON 字符串 → Java List/对象

文章目录一、resultMap 核心作用二、基本用法&#xff08;以你的配置为例&#xff09;1. 定义 resultMap2. 在 SQL 中使用 resultMap三、关键注意事项resultMap 是 MyBatis 中用于定义数据库表字段与 Java 实体类属性之间映射关系的核心配置&#xff0c;解决表字段名和实体类属…

PySINDy

PySINDy A Python package for the Sparse Identification of Nonlinear Dynamics from Data Abstract PySINDy 是一个用于从数据中发现主导动力系统模型的 Python 软件包。具体来说&#xff0c;PySINDy 提供了应用非线性动力学稀疏辨识&#xff08;SINDy&#xff09;[1] 方法…

校园跑腿小程序源码 | 跑腿便利店小程序(源码下载)

校园跑腿小程序源码 | 跑腿便利店小程序 本项目后端采用 midway3.0&#xff0c;后台采用 nuxt2.x,小程序采用 uniapp 实现的一套跑腿下单接单系统。 主要功能&#xff1a;跑腿、快递代取、陪练陪玩、软件安装、申请接单、用户下单、提现、物品重量计算等。 源码下载&#xf…

基于stm32的物联网OneNet火灾报警系统

1 系统功能介绍 本设计为基于STM32单片机的物联网OneNet火灾报警系统。系统通过采集环境中的温湿度、火焰检测数据&#xff0c;并结合物联网技术上传至OneNet云平台&#xff0c;实现远程监控和报警功能。系统还具备蜂鸣器报警、LED灯闪烁等本地报警功能&#xff0c;保证在火灾发…

校园跑腿小程序源码 _ 跑腿便利店小程序 含搭建教程

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 校园跑腿小程序源码 | 跑腿便利店小程序 本项目后端采用 midway3.0&#xff0c;后台采用 nuxt2.x,小程序采用 uniapp 实现的一套跑腿下单接单系统。 主要功能&#xff1a;跑腿、快递代…