侵权投诉

鸿蒙的数据库知识点学习

HarmonyOS技术社区 2021-09-06 09:34 次阅读

移动端开发,数据存储是非常重要的,鸿蒙也不例外,说到数据存储,首要的就是数据库了,数据库的存储机制是否完善,提供的功能是否简单方便,直接影响开发者的开发速度和性能。

作为鸿蒙开发者,最近就深入学习了鸿蒙的数据库知识点,了解了存储机制并且尝试了使用,发现鸿蒙的数据库真的做到了应有尽有,操作还简单的地步。

鸿蒙关系型数据库

先来看看鸿蒙的关系型数据库(Relational Database,RDB)概念。

鸿蒙的 RDB 是一种基于关系模型来管理数据的数据库。HarmonyOS 关系型数据库基于 SQLite 组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查接口,也可以直接运行用户输入的 SQL 语句来满足复杂的场景需要。

HarmonyOS 提供的关系型数据库功能更加完善,查询效率更高。

概念中一句话很重要,HarmonyOS 提供的关系型数据库功能更加完善,查询效率更高。

看到这里我当时是非常激动的,作为开发者难道不是最希望使用的 API 在什么情况下都适用吗?

下面看看鸿蒙数据库的运作机制,了解机制才能了解数据库开发的核心,也有利于扩展。

运作机制

HarmonyOS 关系型数据库对外提供通用的操作接口,底层使用 SQLite 作为持久化存储引擎,支持 SQLite 具有的所有数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译 SQL 语句。

看到上面的鸿蒙数据库的运行机制不难发现,主要工作还是在 framework 层做的封装,然后调用 JNI,使用的还是 SQLite 组件。

不管底层怎么做的开发,只要功能完善,体验到位,鸿蒙应用端直接使用不是很香吗?

约束与限制

①数据库中连接池的最大数量是 4 个,用以管理用户的读写操作。

连接池的数量是有限制的 ,最大时 4 个,不过 4 个已经足够使用了。

②为保证数据的准确性,数据库同一时间只能支持一个写操作。

同一时间支持一个写操作时非常重要的,为了防止数据存储的正确性,鸿蒙做了这一个限制,但是作为多年的移动端开发者,一般这种多操作或者大数据操作,都会使用多线程,异步线程,或者放在线程池中,这样就更完美了。

数据库操作 DataAbility

鸿蒙在创建类的时候有一个 DataAbility,不知道各位开发者使用过了没,其实这个就是为了数据库操作而来的。

添加步骤很简单:添加类的时候选择 Empty DataAbility 即可。

①配置

添加类后,会自动生成如下配置:

{

“permissions”: [

“com.huawei.codelab.DataAbilityShellProvider.PROVIDER”

],

“name”: “com.hadiidbouk.databasemanager.database.DataAbility”,

“icon”: “$media:icon”,

“description”: “$string:dataability_description”,

“type”: “data”,

“uri”: “dataability://com.huawei.codelab.PersonDataAbility”

}

操作数据库需要权限信息:

“permissions”: [

“com.huawei.codelab.DataAbilityShellProvider.PROVIDER”

需要配置 url,url 很重要,在进行数据库表操作的时候需要保持一致。

②DataAbility 操作内容

默认创建的 DataAbility 类会自动重写 数据库的增,删,改,查 几种操作的函数。

可以看下面:

添加 DataAbility 会自动重写四个接口函数,有关数据库的增,删,改,查。

该 DataAbility 在运行项目后会自行执行 onStart 方法进行数据库及其数据表的创建工作。

通过 RdbPredicates 数据库进行数据库关系的关联进行操作。

public class DataAbility extends Ability {

private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, “Demo”);

private static final String DB_NAME = “persondataability.db”;

private static final String DB_TAB_NAME = “person”;

private static final String DB_COLUMN_PERSON_ID = “id”;

private static final String DB_COLUMN_NAME = “name”;

private static final String DB_COLUMN_GENDER = “gender”;

private static final String DB_COLUMN_AGE = “age”;

private static final int DB_VERSION = 1;

private StoreConfig config = StoreConfig.newDefaultConfig(DB_NAME);

private RdbStore rdbStore;

private RdbOpenCallback rdbOpenCallback = new RdbOpenCallback() {

@Override

public void onCreate(RdbStore store) {

store.executeSql(“create table if not exists ”

+ DB_TAB_NAME + “ (”

+ DB_COLUMN_PERSON_ID + “ integer primary key, ”

+ DB_COLUMN_NAME + “ text not null, ”

+ DB_COLUMN_GENDER + “ text not null, ”

+ DB_COLUMN_AGE + “ integer)”);

}

@Override

public void onUpgrade(RdbStore store, int oldVersion, int newVersion) {

}

};

@Override

public void onStart(Intent intent) { //创建数据库操作

super.onStart(intent);

HiLog.info(LABEL_LOG, “DataAbility onStart”);

DatabaseHelper databaseHelper = new DatabaseHelper(this);

rdbStore = databaseHelper.getRdbStore(config, DB_VERSION, rdbOpenCallback, null);

}

// 数据库 查询操作

@Override

public ResultSet query(Uri uri, String[] columns, DataAbilityPredicates predicates) {

RdbPredicates rdbPredicates = DataAbilityUtils.createRdbPredicates(predicates, DB_TAB_NAME);

ResultSet resultSet = rdbStore.query(rdbPredicates, columns);

if (resultSet == null) {

HiLog.info(LABEL_LOG, “resultSet is null”);

}

return resultSet;

}

// 数据库 插入操作

@Override

public int insert(Uri uri, ValuesBucket value) {

HiLog.info(LABEL_LOG, “DataAbility insert”);

String path = uri.getLastPath();

if (!“person”.equals(path)) {

HiLog.info(LABEL_LOG, “DataAbility insert path is not matched”);

return -1;

}

ValuesBucket values = new ValuesBucket();

values.putInteger(DB_COLUMN_PERSON_ID, value.getInteger(DB_COLUMN_PERSON_ID));

values.putString(DB_COLUMN_NAME, value.getString(DB_COLUMN_NAME));

values.putString(DB_COLUMN_GENDER, value.getString(DB_COLUMN_GENDER));

values.putInteger(DB_COLUMN_AGE, value.getInteger(DB_COLUMN_AGE));

int index = (int) rdbStore.insert(DB_TAB_NAME, values);

DataAbilityHelper.creator(this, uri).notifyChange(uri);

return index;

}

// 数据库 删除操作

@Override

public int delete(Uri uri, DataAbilityPredicates predicates) {

RdbPredicates rdbPredicates = DataAbilityUtils.createRdbPredicates(predicates, DB_TAB_NAME);

int index = rdbStore.delete(rdbPredicates);

HiLog.info(LABEL_LOG, “delete: ” + index);

DataAbilityHelper.creator(this, uri).notifyChange(uri);

return index;

}

// 数据库 更新操作

@Override

public int update(Uri uri, ValuesBucket value, DataAbilityPredicates predicates) {

RdbPredicates rdbPredicates = DataAbilityUtils.createRdbPredicates(predicates, DB_TAB_NAME);

int index = rdbStore.update(value, rdbPredicates);

HiLog.info(LABEL_LOG, “update: ” + index);

DataAbilityHelper.creator(this, uri).notifyChange(uri);

return index;

}

@Override

public FileDescriptor openFile(Uri uri, String mode) {

return null;

}

@Override

public String[] getFileTypes(Uri uri, String mimeTypeFilter) {

return new String[0];

}

@Override

public PacMap call(String method, String arg, PacMap extras) {

return null;

}

@Override

public String getType(Uri uri) {

return null;

}

}

③数据库操作

这里的数据库操作时,开发需求做的数据库操作,可以通过自己的需求来开发数据库的调用操作,最终还是通过使用 DataAbility 直接调用系统的数据库。

public class DataBaseAbilitySlice extends AbilitySlice {

private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, “Demo”);

private DataAbilityHelper databaseHelper;

private static final String BASE_URI = “dataability:///com.huawei.codelab.PersonDataAbility”;

private static final String DATA_PATH = “/person”;

private static final String DB_COLUMN_PERSON_ID = “id”;

private static final String DB_COLUMN_NAME = “name”;

private static final String DB_COLUMN_GENDER = “gender”;

private static final String DB_COLUMN_AGE = “age”;

@Override

public void onStart(Intent intent) {

super.onStart(intent);

super.setUIContent(ResourceTable.Layout_ability_data_base);

databaseHelper = DataAbilityHelper.creator(this);

Text text = (Text)findComponentById(ResourceTable.Id_text_helloworld);

text.setClickedListener(new Component.ClickedListener() {

@Override

public void onClick(Component component) {

query();

insert(100, “Tom”, “male”, 20);

insert(101, “Jerry”, “female”, 21);

insert(102, “Bob”, “male”, 22);

query(); // 查看插入后的结果

update();

query(); // 查看更新后的结果

delete();

query(); // 查看删除后的结果

}

});

}

@Override

public void onActive() {

super.onActive();

}

@Override

public void onForeground(Intent intent) {

super.onForeground(intent);

}

private void insert(int id, String name, String gender, int age) {

ValuesBucket valuesBucket = new ValuesBucket();

valuesBucket.putInteger(DB_COLUMN_PERSON_ID, id);

valuesBucket.putString(DB_COLUMN_NAME, name);

valuesBucket.putString(DB_COLUMN_GENDER, gender);

valuesBucket.putInteger(DB_COLUMN_AGE, age);

try {

if (databaseHelper.insert(Uri.parse(BASE_URI + DATA_PATH), valuesBucket) != -1) {

// if (databaseHelper.insert(Uri.parse(BASE_URI + DATA_PATH), valuesBucket) != -1) {

HiLog.info(LABEL_LOG, “insert successful”);

}

} catch (DataAbilityRemoteException | IllegalStateException exception) {

HiLog.error(LABEL_LOG, “insert: dataRemote exception|illegalStateException”);

}

}

private void delete() {

DataAbilityPredicates predicates = new DataAbilityPredicates()

.equalTo(DB_COLUMN_PERSON_ID, 100);

try {

if (databaseHelper.delete(Uri.parse(BASE_URI + DATA_PATH), predicates) != -1) {

HiLog.info(LABEL_LOG, “delete successful”);

}

} catch (DataAbilityRemoteException | IllegalStateException exception) {

HiLog.error(LABEL_LOG, “delete: dataRemote exception | illegalStateException”);

}

}

private void update() {

DataAbilityPredicates predicates = new DataAbilityPredicates();

predicates.equalTo(DB_COLUMN_PERSON_ID, 102);

ValuesBucket valuesBucket = new ValuesBucket();

valuesBucket.putString(DB_COLUMN_NAME, “ZhangSanPlus”);

valuesBucket.putInteger(DB_COLUMN_AGE, 28);

try {

if (databaseHelper.update(Uri.parse(BASE_URI + DATA_PATH), valuesBucket, predicates) != -1) {

HiLog.info(LABEL_LOG, “update successful”);

}

} catch (DataAbilityRemoteException | IllegalStateException exception) {

HiLog.error(LABEL_LOG, “update: dataRemote exception | illegalStateException”);

}

}

private void query() {

String[] columns = new String[] {DB_COLUMN_PERSON_ID,

DB_COLUMN_NAME, DB_COLUMN_GENDER, DB_COLUMN_AGE};

// 构造查询条件

DataAbilityPredicates predicates = new DataAbilityPredicates();

predicates.between(DB_COLUMN_AGE, 15, 40); // 查询时间段

try {

ResultSet resultSet = databaseHelper.query(Uri.parse(BASE_URI + DATA_PATH),

columns, predicates);

if (resultSet == null || resultSet.getRowCount() == 0) {

HiLog.info(LABEL_LOG, “query: resultSet is null or no result found”);

return;

}

resultSet.goToFirstRow();

do {

int id = resultSet.getInt(resultSet.getColumnIndexForName(DB_COLUMN_PERSON_ID));

String name = resultSet.getString(resultSet.getColumnIndexForName(DB_COLUMN_NAME));

String gender = resultSet.getString(resultSet.getColumnIndexForName(DB_COLUMN_GENDER));

int age = resultSet.getInt(resultSet.getColumnIndexForName(DB_COLUMN_AGE));

HiLog.info(LABEL_LOG, “query: Id :” + id + “ Name :” + name + “ Gender :” + gender + “ Age :” + age);

} while (resultSet.goToNextRow());

} catch (DataAbilityRemoteException | IllegalStateException exception) {

HiLog.error(LABEL_LOG, “query: dataRemote exception | illegalStateException”);

}

}

}

数据插入使用对象类 ValuesBucket;使用 DataAbilityPredicates 实例进行数据查询的条件设置。

到此有关数据库的关系型数据库操作基本就完成了,是不是非常,非常简单,可以直接拿来主义验证一下。

责任编辑:haq

原文标题:鸿蒙的关系型数据库,被惊艳到了!

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:HarmonyOS技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

开源大师兄 青少年OpenHarmony开发板硬件特性介绍

继OpenHarmony 3.0  LTS版本于 2021 年 9 月 30 日上线以来,在包括教育....
发表于 10-27 12:14 78次 阅读
开源大师兄 青少年OpenHarmony开发板硬件特性介绍

《道德经》原子化服务UX历程和后续升级计划

发表于 10-27 11:36 0次 阅读
《道德经》原子化服务UX历程和后续升级计划

单片机(MCU)最强科普(万字总结,值得收藏)

MCU是Microcontroller Unit 的简称,中文叫微控制器,俗称单片机,是把CPU的频....
发表于 10-27 11:36 5次 阅读
单片机(MCU)最强科普(万字总结,值得收藏)

网易云和腾讯互掐起来了?鸿蒙“后院”起火了

今天打开手机老王看到了一条有意思的新闻:“网易云和腾讯QQ音乐都说自己是第一家接入鸿蒙的流媒体音乐,要互掐了吗?” 发...
发表于 10-27 10:08 0次 阅读

HDC技术分论坛:HarmonyOS新一代UI框架的全面解读

作者:yuzhiqiang,UI编程框架首席技术专家在Harmony 3.0.0开发者预览版中,包含了新一代的声明式UI框架ArkUI 3.0、多语...
发表于 10-26 18:48 101次 阅读
HDC技术分论坛:HarmonyOS新一代UI框架的全面解读

HarmonyOS IDE工具DevEco 新版本3.0 Beta1发布

2021年10月22日的华为开发者大会HDC.Together 2021主题演讲会上,我们发布了HarmonyOS 3.0.0开发者预览版。预览版本中包含...
发表于 10-26 18:16 202次 阅读
HarmonyOS IDE工具DevEco 新版本3.0 Beta1发布

鸿蒙3.0给业内带来了哪些惊喜

据海外调研机构数据预测,2021年全球移动操作系统市场,Android占据73%的市场份额,苹果iO....
的头像 电子发烧友网 发表于 10-26 17:35 320次 阅读

第二届HarmonyOS开发者创新大赛正式启动 梦想再度启航

在10月22日举办的 华为 开发者大会(Together)上,第二届“ HarmonyOS 开发者创....
发表于 10-26 17:09 75次 阅读
第二届HarmonyOS开发者创新大赛正式启动 梦想再度启航

华为开发者大会有什么亮点

华为开发者大会2021于10月22至24在广东松山湖举行,开发者大会HDC 2021主题演讲嘉宾阵容....
的头像 lhl545545 发表于 10-26 17:03 270次 阅读

什么人会叁加华为开发者大会

华为开发者大会2021在广东东莞盛大召开,2021华为开发者大会参会者有华为专家、全球开发者等受邀参....
的头像 lhl545545 发表于 10-26 16:42 295次 阅读

华为开发者大会2021 10月官网

华为开发者大会2021近日正式在广东举行,本次大会聚焦HarmonyOS、智能家居、智慧办公、HMS....
的头像 lhl545545 发表于 10-26 16:26 338次 阅读

HDC2021HarmonyOS学生公开课:校园布道未来可循

为了让学生了解HarmonyOS最新技术、商业价值、生态价值,以及学生开发者如何成长等信息,10月2....
的头像 话说科技 发表于 10-26 15:06 156次 阅读
HDC2021HarmonyOS学生公开课:校园布道未来可循

HarmonyOS原子化服务新赛道:系统级入口服务中心

10月22日-24日,为期三天的华为开发者大会2021(Together)在东莞举行。本次大会《Ha....
的头像 话说科技 发表于 10-26 15:05 170次 阅读
HarmonyOS原子化服务新赛道:系统级入口服务中心

楷登电子通过N3和N4 工艺的定制化/模拟工具套件认证

Cadence 数字和定制/模拟先进工艺节点解决方案支持 Cadence 智能系统设计(Intell....
的头像 Cadence楷登 发表于 10-26 14:44 279次 阅读

华为开发者大会2021上市股票

华为开发者大会2021上市股票有哪些?华为开发者大会2021上市股票有中国长城、中国软件、金山办公、....
的头像 lhl545545 发表于 10-26 14:37 201次 阅读

华为2021开发者大会最新消息

华为开发者大会2021在中国松山湖举行,会上,华为公司基于OpenHarmony提供了Harmony....
的头像 lhl545545 发表于 10-26 14:20 185次 阅读

嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

浅谈嵌入式MCU开发中的三个常见误区原创2017-09-30胡恩伟汽车电子expert成长之路目录(....
发表于 10-26 12:06 4次 阅读
嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

2021华为开发者大会介绍

华为开发者大会2021精彩纷呈,大会上主要聚焦了HarmonyOS、智慧办公、HMS Core等热门....
的头像 lhl545545 发表于 10-26 11:45 234次 阅读

Harmony应用开发--自定义标题栏实战

在Harmony开发过程中,如果对系统标题栏感到不满意,可以进行自行修改设计。配置文件(config.json)修改,在module下添加下面内...
发表于 10-26 11:37 101次 阅读
Harmony应用开发--自定义标题栏实战

华为开发者大会全程回顾

华为开发者大会2021(Together)在东莞松山湖已经完美落幕,下面我们一起来看看2021华为开....
的头像 lhl545545 发表于 10-26 11:16 209次 阅读

华为开发者大会2021鸿蒙系统升级

2021华为开发者大会10月22日至24日如期在松山湖举行,会上,华为正式发布了HarmonyOS3....
的头像 lhl545545 发表于 10-26 10:08 247次 阅读

关于Mysql的20道问题详解

1.什么Mysql的事务?事务的四大特性?事务带来的什么问题? Mysql中事务的隔离级别分为四大等....
的头像 Linux爱好者 发表于 10-26 09:56 105次 阅读
关于Mysql的20道问题详解

华为开发者大会在哪里看

2021年华为开发者大会近日正式在东莞松山湖举行,会上华为发布了HarmonyOS 3开发者预览版、....
的头像 lhl545545 发表于 10-26 09:56 167次 阅读

万物智联与烟火人间 HDC 2021华为开发者大会 一场跨越20年的双向奔赴

自从2011年,Gartner在著名的“新兴技术炒作周期”上,增加了一个新技术名词:物联网。IoT从....
的头像 脑极体 发表于 10-26 09:00 805次 阅读
万物智联与烟火人间 HDC 2021华为开发者大会 一场跨越20年的双向奔赴

华为开发者大会2021在哪

华为开发者大会2021在广东东莞松山湖举行,时间为三天,10月22至24天,华为官方已经公布了开发者....
的头像 lhl545545 发表于 10-25 17:53 444次 阅读

太强了!华为自研鸿蒙编程语言,行业大佬都已经偷偷学起来了

华为开发者大会 2021(Together)上,Harmony OS 3 开发者预览版正式发布,华为鸿蒙又是一个历史性的进步啊,而且,华为还表...
发表于 10-25 16:53 270次 阅读

华为开发者大会2021概念股

  华为开发者大会2021在10月22至24日在东莞松山湖如期举行,中国软件万兴科技等鸿蒙概念股有望....
的头像 lhl545545 发表于 10-25 16:44 319次 阅读

华为开发者大会值得参加吗

2021华为开发者大会值得参加。10月22至24日,2021华为开发者大会聚焦行业技术大咖发表了技术....
的头像 lhl545545 发表于 10-25 16:15 139次 阅读

2021华为开发者大会分论坛

华为开发者大会2021近日在广东如期举行,本次大会HarmonyOS鸿蒙生态成为重要参与者,华为除了....
的头像 lhl545545 发表于 10-25 15:56 316次 阅读

HarmonyOS 3.0.0开发者预览版全新发布

2021年10月22日在华为开发者大会HDC.Together 2021 主题演讲上,我们发布了HarmonyOS 3.0.0开发者预览版,主要内容包括:...
发表于 10-25 15:49 402次 阅读
HarmonyOS 3.0.0开发者预览版全新发布

2021华为开发者大会心得体会

10月22至24日华为正式举行了2021华为HDC开发者大会,华为通过展示软硬件协同的全场景多终端教....
的头像 lhl545545 发表于 10-25 15:25 180次 阅读

华为开发者大会是干嘛的

2021华为HDC开发者大会堪称“开发者嘉年华”,华为开发者大会是面向ICT等领域全球开发者的年度旗....
的头像 lhl545545 发表于 10-25 15:12 182次 阅读

不容错过!鸿蒙开发必备神器,老王月薪过万的秘诀都在这了

大家应该都知道在华为开发者大会HDC.Together 2021主题演讲会上,华为发布了HarmonyOS3.0.0开发者预览版。 预览版本中...
发表于 10-25 14:47 44次 阅读

HarmonyOS原子化服务卡片开发-快照实战说明

1.快照作用在服务中心显示卡片的过程中,因为页面加载需要一定时间,所以在服务中心中会先显示快照,后续再显示加载的小卡页面,...
发表于 10-25 13:42 0次 阅读
HarmonyOS原子化服务卡片开发-快照实战说明

华为开发者大会2021视频

华为开发者大会2021(Together)在东莞如期举行,华为消费总裁CEO余承恩在以“未来 有迹可....
的头像 lhl545545 发表于 10-25 11:23 281次 阅读

2020华为开发者大会直播入口

2020 年华为开发者大会与9 月10 日至9 月12 日在东莞松山湖举行。会上,华为揭开 了关于H....
的头像 lhl545545 发表于 10-25 11:09 213次 阅读

华为开发者大会2021举办时间

华为开发者大会HDC 2021在10月22至24日如期召开,地点在中国松山湖举行。华为与全球开发者汇....
的头像 lhl545545 发表于 10-25 10:50 194次 阅读

华为开发者大会2021官网

华为开发者大会2021近日已经正式开幕,华为公司在会上宣布HMS全球开发者已达510万,通过Harm....
的头像 lhl545545 发表于 10-25 10:36 224次 阅读

HarmonyOS驱动华为全屋智能再升级让智能家体验更近一步

(中国,东莞,2021年10月23日)华为开发者大会2021(Together)如期在东莞松山湖举行....
的头像 话说科技 发表于 10-25 10:31 258次 阅读
HarmonyOS驱动华为全屋智能再升级让智能家体验更近一步

梦想再度启航,第二届HarmonyOS开发者创新大赛正式启动

在10月22日举办的华为开发者大会(Together)上,第二届“HarmonyOS开发者创新大赛”....
的头像 话说科技 发表于 10-25 10:18 5550次 阅读
梦想再度启航,第二届HarmonyOS开发者创新大赛正式启动

华为开发者大会发布HarmonyOS 3预览版等全新开发技术,搭载HarmonyOS的设备超过1.5亿台

HarmonyOS已在超过1.5亿智能手机、平板、手表、智慧屏等设备上应用,成为万物智联时代的数字底....
的头像 西西 发表于 10-25 09:55 704次 阅读

华为何刚:网络安全和隐私保护是华为践行全场景生态战略的原点

华为提出消费者业务安全与隐私保护的“四大主张”,即自上而下的组织与流程保障、制定严苛的隐私安全原则、....
发表于 10-25 09:50 236次 阅读

鸿蒙3开发者预览版发布 华为鸿蒙编程语言正在研发中

2021华为开发者大会近日在广东东莞正式举行,随后华为消费总裁余承恩宣布将带来全新HarmonyOS....
的头像 lhl545545 发表于 10-25 09:13 308次 阅读

2021华为开发者大会分论坛HarmonyOS学生公开课布道师从零开始从现在开始

2021华为开发者大会分论坛HarmonyOS学生公开课布道师从零开始从现在开始 在正在直播的202....
的头像 inr999 发表于 10-24 11:47 597次 阅读
2021华为开发者大会分论坛HarmonyOS学生公开课布道师从零开始从现在开始

华为开发者分论坛HarmonyOS学生公开课-HarmonyOS开发者三大成长阶段与学习资源

2021华为开发者分论坛HarmonyOS学生公开课-HarmonyOS开发者三大成长阶段与学习资源
的头像 lhl545545 发表于 10-24 11:43 514次 阅读
华为开发者分论坛HarmonyOS学生公开课-HarmonyOS开发者三大成长阶段与学习资源

2021华为开发者大会分论坛HarmonyOS学生公开课解读HarmonyOS布道师

在今天的2021华为开发者大会分论坛HarmonyOS学生公开课上华为HarmonyOS开发者运营高....
的头像 inr999 发表于 10-24 11:35 536次 阅读
2021华为开发者大会分论坛HarmonyOS学生公开课解读HarmonyOS布道师

华为开发者分论坛HarmonyOS学生公开课-如何成为HarmonyOS校园布道师

2021华为开发者分论坛HarmonyOS学生公开课-如何成为HarmonyOS校园布道师
的头像 lhl545545 发表于 10-24 11:33 484次 阅读
华为开发者分论坛HarmonyOS学生公开课-如何成为HarmonyOS校园布道师

华为开发者分论坛HarmonyOS学生公开课-开发者成长图谱

2021华为开发者分论坛HarmonyOS学生公开课-开发者成长图谱
的头像 lhl545545 发表于 10-24 11:25 389次 阅读
华为开发者分论坛HarmonyOS学生公开课-开发者成长图谱

华为开发者分论坛HarmonyOS学生公开课-OpenHarmony Codelabs开发案例

2021华为开发者分论坛HarmonyOS学生公开课-OpenHarmony Codelabs开发案....
的头像 lhl545545 发表于 10-24 11:25 379次 阅读
华为开发者分论坛HarmonyOS学生公开课-OpenHarmony Codelabs开发案例

华为开发者分论坛HarmonyOS学生公开课-10分钟玩转codeLabs应用案例

2021华为开发者分论坛HarmonyOS学生公开课-10分钟玩转codeLabs应用案例
的头像 lhl545545 发表于 10-24 11:17 379次 阅读
华为开发者分论坛HarmonyOS学生公开课-10分钟玩转codeLabs应用案例

2021华为开发者大会HarmonyOS学生公开课上分享精彩样例

在今天的2021华为开发者大会分论坛HarmonyOS学生公开课上分享了很多的精彩样例;比如分布式任....
的头像 inr999 发表于 10-24 11:17 466次 阅读
2021华为开发者大会HarmonyOS学生公开课上分享精彩样例

2021华为开发者大会HarmonyOS学生公开课上教你10分钟成为HarmonyOS开发者

2021华为开发者大会HarmonyOS学生公开课上教你10分钟成为HarmonyOS开发者 学习H....
的头像 inr999 发表于 10-24 11:03 359次 阅读
2021华为开发者大会HarmonyOS学生公开课上教你10分钟成为HarmonyOS开发者