首先,什么是AppGallery Connect云数据库服务?

先来看下官方介绍:https://developer.huawei.com/...

华为AppGallery Connect的云数据库(CloudDB)是一款端云协同的数据库产品,提供端云数据的协同管理、统一的数据模型和丰富的数据管理API接口等能力。在保证数据的可用性、可靠性、一致性,以及安全等特性基础上,能够实现数据在客户端和云端之间的无缝同步,并为应用提供离线支持,以帮助开发者快速构建端云、多端协同的应用。

是不是有点难懂?下面我用大白话翻译一下:

云数据库(CloudDB)是为我们开发者服务的,他提供了一个端云协同的数据库服务,可以通过SDK和API接口,简单方便的集成到APP应用里面,使用安全可靠。集成的时候,开发者们不需要关注服务器的搭建和部署运维,直接通过SDK和API接口使用就行。

翻译以后,是不是就很好懂了哈哈。

其他原理、功能、安全啥的先不看,我们先来看下怎么在Android应用里,快速把CloudDB使用起来。经过我的试用,发现使用其实很方便,总结下来,就是下面的三步走:

1、界面操作:创建对象类型及存储区

2、应用前置步骤:导出对象类型并且执行用户认证。

3、在Android项目集成CloudDB: 集成SDK,使用接口增删改查:

1、界面操作 :
写在最前:CloudDB还处于Beta阶段,需要先发邮件申请开通服务,可以参考这个链接:https://developer.huawei.com/...

界面操作主要包括两方面,创建对象类型 以及创建存储区

1.1、对象类型是啥?
简单来说,对象类型就是你数据库里面,用来存放数据的表,每一个对象类型,就是一种表。打个简单的比方,你有一个excel文件用来存数据,每一个excel里都可以创建不同的工作表,每一个工作表,就相当于CloudDB里面的一个对象类型。比如我是一个老师,工作表1里面存放的是学生信息,包括学生的性别和学号;表2里存放的学生的成绩,包括学生的学号和各科成绩。

这样是不是就很好理解了。

1.2、存储区又是啥?
这个可以从界面意思来理解了,就是用来存储数据的一片区域,不同的存储区是相互隔离的。继续上面的例子:我一个老师,可能会带多个班级,记录学生成绩的时候,不同的班用不同的excel文件。每个excel文件里都包括了学生信息表和成绩表。

在上面你的例子里,每一个excel文件,就是一个存储区,两个excel互不相关。每个excel里都有不同的工作表,每个工作表就是一个对象类型。

1.3、创建对象类型
讲完了概念,下面来讲一下操作:前提是你已经申请并且开通的CloudDB服务哈。

1、在 “我的项目” –>“构建” -> “云数据库”界面,在对象类型页签,点击新增创建一个对象类型。

2、按照上面说的例子,我创建一个StudentInfo的表,注意需要设置主键,并且为认证用户勾选Upsert和delete权限。


1.4、创建存储区
这个就简单很多了,直接在存储区页签,点击新增,数据存储区的名字,点确定就好了。

应用前置步骤
想要在Android应用里正确的使用CloudDB,还需要有两个前置的步骤,导出对象类型和用户认证。

1、 导出对象类型:

简单说,就是讲上一步创建的对象类型,导出到你本地的Android项目里,这样才能让Android项目和你云端的数据库进行同步:导出的操作如下:

导出以后。记得放到你的Android项目里面,哪我这个举例,我把导出的对象类型都放在model路径下

在Android项目集成CloudDB
1、集成SDK
1、下载json:在你的“我的项目 –> 项目设置 -> 应用”下,下载json文件,并且放到你Android项目的的app路径下:

2、 配置项目级build.gradle文件

buildscript {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'
        classpath 'com.huawei.agconnect:agcp:1.4.2.301'
    }
}
  
allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}
  
task clean(type: Delete) {
    delete rootProject.buildDir
}

3、 配置应用级build.gradle文件

apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
 ...
android {
                ……
compileOptions {
                                sourceCompatibility = 1.8
                                targetCompatibility = 1.8
}
}
dependencies {
 ...
implementation 'com.huawei.agconnect:agconnect-auth:1.4.2.300'        // 华为Auth服务,用于用户认证
implementation 'com.huawei.agconnect:agconnect-database:1.2.3.301'               // CloudDB的SDK
}

1.1 前置操作

补充一个小插曲,CloudDB对操作权限有做限制,需要认证用户才能进行增删改操作,因此还需要集成华为认证服务,上一个步骤集成的Auth SDK就是这个作用的。

1、先去AGC界面开通认证服务,此处为了最简单的集成,我就只用匿名认证来给大家做示例:选择“我的项目 –> 构建 -> 认证服务”中,启动匿名认证。

2、匿名认证相关代码:

AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() {
     @Override
     public void onSuccess(SignInResult signInResult) {
         // onSuccess
         AGConnectUser user = signInResult.getUser();
     }
 }).addOnFailureListener(new OnFailureListener() {
     @Override
     public void onFailure(Exception e) {
         // onFail
     }
 });

2、初始化
初始化包括有三部分:初始化AGConnectCloudDB、创建对象类型、以及创建并打开CloudDB Zone(也就是前面说的存储区)

1、先在onCreate最外层,定义需要使用的参数:

private AGConnectCloudDB mCloudDB;
 private CloudDBZoneConfig mConfig;
 private CloudDBZone mCloudDBZone;

2、初始化AGConnectCloudDB。
AGConnectCloudDB.initialize(this);

3、获取AGConnectCloudDB实例并且创建对象类型

mCloudDB = AGConnectCloudDB.getInstance();
 try {
     mCloudDB.createObjectType(ObjectTypeInfoHelper.getObjectTypeInfo());
 } catch (AGConnectCloudDBException e) {
     Log.e("CloudDB", "createObjectType Failed " + e.getMessage());
 }

4、创建并打开CloudDB Zone

Config = new CloudDBZoneConfig("classs1",
         CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
         CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC);
 mConfig.setPersistenceEnabled(true);
 try {
     CloudDBZone = mCloudDB.openCloudDBZone(mConfig, true);
 } catch (AGConnectCloudDBException e) {
     Log.e("CloudDB", "openCloudDBZone failed: " + e.getMessage());
 }

注意咯,这里也可以用异步的openCloudDBZone2方法法,具体操作这里就不介绍了。具体看如下文档哈。

https://developer.huawei.com/...

3、数据库操作:
接下来既可以进行愉快的数据库操作啦。下面我拿查询举个例:

1、先在AGC界面上,插入两条数据用来测试:test1和test2:

2、然后回到Android项目里,通过executeQuery查询全量数。

Task<CloudDBZoneSnapshot<StudentInfo>> queryTask = mCloudDBZone.executeQuery(
         CloudDBZoneQuery.where(StudentInfo.class),
         CloudDBZoneQuery.CloudDBZoneQueryPolicy.POLICY_QUERY_FROM_CLOUD_ONLY);
 queryTask.addOnSuccessListener(new OnSuccessListener<CloudDBZoneSnapshot<StudentInfo>>() {
     @Override
     public void onSuccess(CloudDBZoneSnapshot<StudentInfo> snapshot) {
         //
         CloudDBZoneObjectList<StudentInfo> InfoCursor = snapshot.getSnapshotObjects();
         ArrayList<StudentInfo> infoList = new ArrayList<>();
         StudentInfo studentInfo = new StudentInfo();
         try {
             while (InfoCursor.hasNext()) {
                 studentInfo = InfoCursor.next();
                 infoList.add(studentInfo);
             }
             Log.i("CloudDB", "query success: " + JSONArray.toJSONString(studentInfo));
         } catch (AGConnectCloudDBException e) {
             Log.e("CloudDB", "query failed: " + e.getMessage());
         }
         snapshot.release();
     }
 });

3、然后就能在Logcat里面,查看看相应的查询数据:

4、后续的增删改操作,我就不再详细说明了,大家可以直接看文档或API参考

配置指南:https://developer.huawei.com/...

API参考:https://developer.huawei.com/...

总结
虽然资料文档看起来很多,但实际操作起来,也就三步就能完成的。

1、云侧操作,创建对象类型和存储区:

2、导出对象类型到Android项目

3、在Android项目中集成SDK并且使用API接口。

三步下来,就完成了一个数据库系统的集成,没有任何数据库搭建和部署相关的操作,而且现在CloudDB还是免费使用的,简直不要太爽。

最后再附上官方CloudDB文档,需要的可以自行查看:

配置指南:https://developer.huawei.com/...

API参考:https://developer.huawei.com/...

Demo参考:https://github.com/AppGallery...

原文链接:https://developer.huawei.com/...
原作者:Mayism


华为开发者论坛
352 声望56 粉丝

华为开发者论坛是一个为开发者提供信息传播、开发交流、技术分享的交流空间。开发者可以在此获取技术干货、华为源码开放、HMS最新活动等信息,欢迎大家来交流分享!