当前位置:   article > 正文

DevEco Studio端云协同开发之云数据库_dveecostudio

dveecostudio

自定义HamronyOS启动页组件一文中封装了启动页组件,本节将结合端云协同开发,将启动页需要的参数保存到云数据库中,实现根据特定节气显示不同的启动页背景图。

1 环境

2 云数据库

云数据库(Cloud DB)是Serverless服务提供的能力之一,是AppGallery Connect平台解决方案的一部分,是端云协同的数据库产品,支持数据在端云、多端之间无缝同步,并为应用提供离线支持,以帮助开发者快速构建端云、多端协同应用,开发者可以聚集于应用本身业务,极大提升开发者开发效率,更多请至华为App Gallery Connect云数据库了解。

3 端云协同开发云数据库

DevEco Studio 3.1 Beta1提供了端云协同开发,可以通过云侧CloudProgram项目创建云数据库对象类型、存储区、配置权限,端侧引入相关的云数据库文件即可进行云数据库数据操作,应用开发流程如下图所示:

722de54acd7aefd84ad441a162eef962.png

 

3.1 云侧CloudProgram工程云数据库配置

3.1.1 创建对象类型

云数据库采用存储区、对象类型和对象三级结构基于对象模型的数据库。对象类型是用于定义存储对象的集合,不同对象类型对应的不同数据结构。

在云侧CloudProgram工程clouddb目录下clouddb目录右键New > Cloud DB Object Type创建对象类型,输入对象类型名称,DevEco Studio会自动创建初始对象类型JSON文件。

在对象类型JSON文件中,可以配置字段、索引以及角色于权限,表3-1为数据类型JSON文件属性简单介绍。

表3-1 数据类型JSON文件属性(更多描述参见官方文档)

参数说明
fields数据表字段集,配置属性参见表3-2
indexes数据表索引,配置属性参见表3-3
permissions操作数据表角色及对应权限,配置属性参见表3-4
objectTypeName数据表名称

ec240a47adf7c405b3dfbd3bb14c941e.png

表3-2 数据表字段(更多描述参见官方文档)

参数说明
fieldName字段名称
fieldType字段数据类型
当前支持:String, Boolean, Byte, Shor, Integer, Long, Float, Double, ByteArray, Text, Date, IntAutoIncrement, LongAutoIncrement
belongPrimaryKey字段是否为主键
notNull字段值是否为空
isNeedEncrypt字段是否需要加密
  1.   "fields": [
  2.     {
  3.       "belongPrimaryKey"true,
  4.       "fieldName""id",
  5.       "fieldType""Integer",
  6.       "isNeedEncrypt"false,
  7.       "notNull"true
  8.     },
  9.     {
  10.       "belongPrimaryKey"false,
  11.       "fieldName""timer",
  12.       "fieldType""Integer",
  13.       "isNeedEncrypt"false,
  14.       "notNull"false
  15.     },
  16.     {
  17.       "belongPrimaryKey"false,
  18.       "fieldName""isLogo",
  19.       "fieldType""Boolean",
  20.       "isNeedEncrypt"false,
  21.       "notNull"false
  22.     },
  23.     {
  24.       "belongPrimaryKey"false,
  25.       "fieldName""backgroundImg",
  26.       "fieldType""String",
  27.       "isNeedEncrypt"false,
  28.       "notNull"false
  29.     },
  30.     {
  31.       "belongPrimaryKey"false,
  32.       "fieldName""companyName",
  33.       "fieldType""String",
  34.       "isNeedEncrypt"false,
  35.       "notNull"false
  36.     },
  37.     {
  38.       "belongPrimaryKey"false,
  39.       "fieldName""mFontColor",
  40.       "fieldType""String",
  41.       "isNeedEncrypt"false,
  42.       "notNull"false
  43.     },
  44.     {
  45.       "belongPrimaryKey"false,
  46.       "fieldName""status",
  47.       "fieldType""Integer",
  48.       "isNeedEncrypt"false,
  49.       "notNull"false
  50.     },
  51.     {
  52.       "belongPrimaryKey"false,
  53.       "fieldName""createUser",
  54.       "fieldType""Integer",
  55.       "isNeedEncrypt"false,
  56.       "notNull"false
  57.     },
  58.     {
  59.       "belongPrimaryKey"false,
  60.       "fieldName""createTime",
  61.       "fieldType""Date",
  62.       "isNeedEncrypt"false,
  63.       "notNull"false
  64.     }
  65.   ],

表3-3 数据表索引(更多描述参见官方文档)

参数说明
indexName索引名称
indexList索引包含的字段
  1.   "indexes": [
  2.     {
  3.       "indexName""IDX_202302221057",
  4.       "indexList": [
  5.         {
  6.           "fieldName""id",
  7.           "sortType""DESC"
  8.         }
  9.       ]
  10.     }
  11.   ],

表3-4 操作数据表角色及权限(更多描述参见官方文档)

参数说明
World所有用户,默认最多仅可拥有Read权限
AuthenticatedAppGallery Connect登录的认证用户
Creator数据创建用户
Administrator应用开发者
  1.   "permissions": [
  2.     {
  3.       "rights": [
  4.         "Read"
  5.       ],
  6.       "role""World"
  7.     },
  8.     {
  9.       "rights": [
  10.         "Read",
  11.         "Upsert"
  12.       ],
  13.       "role""Authenticated"
  14.     },
  15.     {
  16.       "rights": [
  17.         "Read",
  18.         "Upsert",
  19.         "Delete"
  20.       ],
  21.       "role""Creator"
  22.     },
  23.     {
  24.       "rights": [
  25.         "Read",
  26.         "Upsert",
  27.         "Delete"
  28.       ],
  29.       "role""Administrator"
  30.     }
  31.   ]

3.1.2 创建数据条目

创建完对象类型,可以通过为对象类型添加数据条目,来预置数据库内容,支持手动创建和自动生成数据条目JSON文件。

  • 手动创建数据条目文件:在clouddb目录下dataentry目录右键New > Cloud DB Data Entry创建数据条目JSON文件,输入数据条目名称。

  • 自动生成数据条目文件:在对象类型JSON文件右键Generate Data Entry输入数据条目自定义名称。

无论选择哪种创建数据条目的方法,DevEco Studio会自动初始化已配置的对象类型,并赋初始值,同时配置数据条目所在存储区名称,如代码中的cloudDBZoneName,可自定义。

  1. {
  2.   "cloudDBZoneName""cloudDBZoneSplash",
  3.   "objectTypeName""splash",
  4.   "objects": [
  5.     {
  6.       "id"1,
  7.       "timer"3,
  8.       "isLogo"false,
  9.       "backgroundImg""https://img1.baidu.com/it/u=1884825806,3687074543&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=889",
  10.       "companyName""xxxx有限公司",
  11.       "mFontColor""#F2F2F2",
  12.       "status"0,
  13.       "createUser"1,
  14.       "createTime"1677035025264
  15.     },
  16.     {
  17.       "id"2,
  18.       "timer"3,
  19.       "isLogo"true,
  20.       "backgroundImg""https://img1.baidu.com/it/u=1884825806,3687074543&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=889",
  21.       "companyName""xxxx有限公司",
  22.       "mFontColor""#F2F2F",
  23.       "status"1,
  24.       "createUser"1,
  25.       "createTime"1677035025264
  26.     }
  27.   ]
  28. }

3.1.3 部署云数据库

在DevEco Studio还未实现端云协同开发之前,要实现云侧数据库需要在网页端配置。当前开发者只需要在DevEco Studio云侧工程中配置好云数据库信息后,右键clouddb目录选择Deploy Cloud DB将云数据库需要的资源统一部署到AGC控制台,Event Log会显示同步进度信息。部署完成后,可在AGC控制台查看部署的云数据库信息。

75a2c2a192f6f8499579767b532465e9.png

3.2 端侧Application访问云侧数据库业务实现

使用端云协同开发,将较于之前的操作会减少如配置开发环境agconnect-services.json文件引入,该文件在创建端云协同工程时会自动初始化到工程中,在entry/src/main/resources/rawfile中;同时会自动引入相关依赖文件,如database-ohos等。

除配置文件和依赖文件之外,还需要和之前的操作相同,导出JSON格式文件和JS格式文件并添加至本地开发环境中。

3.2.1 添加对象类型文件

  • 将导出的数据类型JSON文件内容拷贝到entry/src/main/ets/services/app-schema.json中,若无该文件则创建即可。

  • 将导出的JS格式文件拷贝到entry/src/main/ets/services/目录下。

3.2.2 云数据库操作

该文件仅作为示例应用获取云数据库数据,若需要更详细的开发者可自定义封装,其中异常并未作处理,开发者可根据自身业务做响应的处理。

  1. // entry/src/main/ets/services/CloudDBService.ts
  2. // @ts-ignore
  3. import * as schema from './app-schema.json';
  4. import { splash } from './splash';
  5. import {
  6.     AGConnectCloudDB,
  7.     CloudDBZoneConfig,
  8.     CloudDBZone,
  9.     CloudDBZoneQuery
  10. from '@hw-agconnect/database-ohos';
  11. import { AGCRoutePolicy } from '@hw-agconnect/core-ohos';
  12. import { getAGConnect } from './AgcConfig';
  13. export class CloudDBService {
  14.     private static readonly ZONE_NAME = "cloudDBZoneSplash";
  15.     private static init(contextany): Promise<CloudDBZone> {
  16.         return new Promise((resolve, reject) => {
  17.             getAGConnect(context);
  18.             AGConnectCloudDB.initialize(context);
  19.             AGConnectCloudDB.getInstance({
  20.                 context: context,
  21.                 agcRoutePolicyAGCRoutePolicy.CHINA,
  22.                 objectTypeInfo: schema
  23.             }).then((ret) => {
  24.                 return resolve(ret.openCloudDBZone(this.ZONE_NAME));
  25.             });
  26.         })
  27.     }
  28.     // 查询状态为'1'的启动页信息
  29.     public static query(contextany): Promise<splash> {
  30.         return new Promise((resolve, reject) => {
  31.             const query = CloudDBZoneQuery.where(splash).equalTo("status"1);
  32.             this.init(context).then((ret) => {
  33.                 ret.executeQuery(query).then((ret) => {
  34.                     resolve(ret.getSnapshotObjects()[0]);
  35.                 })
  36.             });
  37.         })
  38.     }
  39. }

3.2.3 将云数据库数据渲染到页面

利用aboutToAppear()方法获取云数据库中的启动页信息。

  1. import { CloudDBService as CloudDB } from '../services/CloudDBService';
  2. import { SplashPage } from '@tetcl/teui';
  3. @Entry
  4. @Component
  5. struct Splash {
  6.   @State result: SplashObj = new SplashObj(5);
  7.   @State isSkip: boolean = false;
  8.   
  9.   onSkipt() {
  10.     // 跳转页面
  11.   }
  12.   
  13.   build() {
  14.     Column() {
  15.       if (this.isSkip) {
  16.         SplashPage({ mSplash: {
  17.           timer: this.result.timer,
  18.           isLogo: this.result.isLogo,
  19.           backgroundImg: this.result.backgroundImg,
  20.           companyName: this.result.companyName,
  21.           mFontColor: this.result.mFontColor
  22.         }, skip: this.onSkip })
  23.       }
  24.     }
  25.     .width('100%')
  26.     .height('100%')
  27.   }
  28.   
  29.   aboutToAppear() {
  30.     // 若受网络印象获取数据时间过长,此处可以自定义一个数据加载动画
  31.     CloudDB.query(getContext(this)).then(ret => {
  32.       this.isSkip = true;
  33.       this.result = ret;
  34.     })
  35.   }
  36. }

3.3 在开发板预览效果

db2b0c4d2155adf85aa323937345602d.jpeg

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/229207
推荐阅读
相关标签
  

闽ICP备14008679号