首先,什么是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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。