未验证 提交 44832759 编写于 作者: O openharmony_ci 提交者: Gitee

!8660 master:database及USB示例代码格式化,修改多余/缺少空格&表格优化:需同步翻译

Merge pull request !8660 from 葛亚芳/master
...@@ -144,11 +144,12 @@ DataShare即数据共享模块,提供了向其他应用共享以及管理其 ...@@ -144,11 +144,12 @@ DataShare即数据共享模块,提供了向其他应用共享以及管理其
let dseUri = ("datashare:///com.samples.datasharetest.DataShare"); let dseUri = ("datashare:///com.samples.datasharetest.DataShare");
``` ```
2. 创建工具接口类对象。 3. 创建工具接口类对象。
```ts ```ts
let dsHelper; let dsHelper;
let abilityContext; let abilityContext;
export default class MainAbility extends Ability { export default class MainAbility extends Ability {
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage) {
abilityContext = this.context; abilityContext = this.context;
...@@ -159,33 +160,33 @@ DataShare即数据共享模块,提供了向其他应用共享以及管理其 ...@@ -159,33 +160,33 @@ DataShare即数据共享模块,提供了向其他应用共享以及管理其
} }
``` ```
3. 获取到接口类对象后,便可利用其提供的接口访问提供方提供的服务,如进行数据的增删改查等。 4. 获取到接口类对象后,便可利用其提供的接口访问提供方提供的服务,如进行数据的增删改查等。
```ts ```ts
// 构建一条数据 // 构建一条数据
var valuesBucket = {"name": "ZhangSan", "age": 21, "isStudent": false, "Binary": new Uint8Array([1,2,3])}; var valuesBucket = { "name": "ZhangSan", "age": 21, "isStudent": false, "Binary": new Uint8Array([1, 2, 3]) };
var updateBucket = {"name": "LiSi", "age": 18, "isStudent": true, "Binary": new Uint8Array([1,2,3])}; var updateBucket = { "name": "LiSi", "age": 18, "isStudent": true, "Binary": new Uint8Array([1, 2, 3]) };
let da = new dataSharePredicates.DataSharePredicates(); let da = new dataSharePredicates.DataSharePredicates();
var valArray =new Array("*"); var valArray = new Array("*");
let people = new Array( let people = new Array(
{"name": "LiSi", "age": 41, "Binary": ar}, { "name": "LiSi", "age": 41, "Binary": ar },
{"name": "WangWu", "age": 21, "Binary": arr}, { "name": "WangWu", "age": 21, "Binary": arr },
{"name": "ZhaoLiu", "age": 61, "Binary": arr}); { "name": "ZhaoLiu", "age": 61, "Binary": arr });
// 插入一条数据 // 插入一条数据
dsHelper.insert(dseUri, valuesBucket, (err, data) => { dsHelper.insert(dseUri, valuesBucket, (err, data) => {
console.log("dsHelper insert result: " + data); console.log("dsHelper insert result: " + data);
}); });
// 删除指定的数据 // 删除指定的数据
dsHelper.delete(dseUri, da, (err, data) => { dsHelper.delete(dseUri, da, (err, data) => {
console.log("dsHelper delete result: " + data); console.log("dsHelper delete result: " + data);
}); });
// 更新数据 // 更新数据
dsHelper.update(dseUri, da, updateBucket, (err, data) => { dsHelper.update(dseUri, da, updateBucket, (err, data) => {
console.log("dsHelper update result: " + data); console.log("dsHelper update result: " + data);
}); });
// 查询数据 // 查询数据
dsHelper.query(dseUri, da, valArray, (err, data) => { dsHelper.query(dseUri, da, valArray, (err, data) => {
console.log("dsHelper query result: " + data); console.log("dsHelper query result: " + data);
}); });
``` ```
...@@ -2,22 +2,23 @@ ...@@ -2,22 +2,23 @@
## 场景介绍 ## 场景介绍
分布式数据对象通过屏蔽设备间复杂的数据交互处理,提供了与本地变量类似的极简操作,当设备1的应用A的分布式数据对象增、删、改数据后,设备2的应用A也可以获取到对应的数据变化,同时还能监听数据变更以及对端数据对象的上下线。分布式数据对象支持的数据类型包括数字型、字符型、布尔型等基本类型,同时也支持数组、基本类型嵌套等复杂类型 分布式数据对象为开发者在分布式应用场景下提供简单易用的功能接口,可实现多设备间同应用的数据协同,同时设备间还可以监听对象的状态和数据变更
比如,当设备1上应用A的分布式数据对象增、删、改数据后,设备2上应用A也可以获取到对应的数据变化,同时还能监听数据变更以及对端数据对象的上下线。
## 接口说明 ## 接口说明
具体分布式数据对象相关功能接口请见[分布式数据对象](../reference/apis/js-apis-data-distributedobject.md) 分布式数据对象相关功能接口请见[分布式数据对象](../reference/apis/js-apis-data-distributedobject.md)
### 创建数据对象实例 ### 创建数据对象实例
创建一个分布式数据对象实例,用户可以通过source指定分布式对象中的属性。 创建一个分布式数据对象实例,开发者可以通过source指定分布式对象中的属性。
**表1** 分布式数据对象实例创建接口 **表1** 分布式数据对象实例创建接口
| 包名 | 接口名 | 描述 | | 包名 | 接口名 | 描述 |
| -------- | -------- | -------- | | -------- | -------- | -------- |
| ohos.data.distributedDataObject| createDistributedObject(source: object): DistributedObject | 创建一个分布式数据对象实例,用于数据操作 <br>-&nbsp;source:设置distributedObject的属性。<br>-&nbsp;DistributedObject:返回值是创建好的分布式对象。| | ohos.data.distributedDataObject| createDistributedObject(source: object): DistributedObject | 创建一个分布式数据对象实例,用于数据操作<br>-&nbsp;source:设置distributedObject的属性。<br>-&nbsp;DistributedObject:返回值是创建好的分布式对象。 |
### 创建分布式数据对象sessionId ### 创建分布式数据对象sessionId
...@@ -35,16 +36,17 @@ ...@@ -35,16 +36,17 @@
**表3** 分布式数据对象sessionId设置接口 **表3** 分布式数据对象sessionId设置接口
| 类名 | 接口名 | 描述 | | 类名 | 接口名 | 描述 |
| -------- | -------- | -------- | | -------- | -------- | -------- |
| DistributedDataObject | setSessionId(sessionId?: string): boolean | 为分布式数据对象设置sessionId <br>&nbsp;sessionId:分布式对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。| | DistributedDataObject | setSessionId(sessionId?: string): boolean | 为分布式数据对象设置sessionId<br>&nbsp;sessionId:分布式对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |
### 订阅数据变更 ### 订阅数据变更
订阅数据变更需要指定Callback作为回调方法,订阅的数据对象发生数据变更后,Callback被回调。 订阅数据变更需要指定Callback作为回调方法,订阅的数据对象发生数据变更后,Callback被回调。
**表4** 分布式数据对象数据变更订阅接口 **表4** 分布式数据对象数据变更订阅接口
| 类名 | 接口名 | 描述 |
| 类名 | 接口名 | 描述 |
| -------- | -------- | -------- | | -------- | -------- | -------- |
| DistributedDataObject| on(type: 'change', callback: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void | 订阅数据变更。 | | DistributedDataObject| on(type: 'change', callback: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void | 订阅数据变更。 |
| DistributedDataObject| off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void | 注销订阅。需要删除的变更回调,若不设置则删除该对象所有的变更回调。 | | DistributedDataObject| off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void | 注销订阅。需要删除的变更回调,若不设置则删除该对象所有的变更回调。 |
### 订阅数据对象上下线 ### 订阅数据对象上下线
...@@ -73,8 +75,6 @@ ...@@ -73,8 +75,6 @@
| 类名 | 接口名 | 描述 | | 类名 | 接口名 | 描述 |
| -------- | -------- | -------- | | -------- | -------- | -------- |
| DistributedDataObject | save(deviceId: string): Promise&lt;SaveSuccessResponse&gt; | 保存数据对象。 | | DistributedDataObject | save(deviceId: string): Promise&lt;SaveSuccessResponse&gt; | 保存数据对象。 |
| DistributedDataObject| save(deviceId: string, callback: AsyncCallback&lt;SaveSuccessResponse&gt;): void | 保存数据对象。 |
| DistributedDataObject | revokeSave(callback: AsyncCallback&lt;RevokeSaveSuccessResponse&gt;): void | 撤回已保存的数据对象。 |
| DistributedDataObject| revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt; | 撤回已保存的数据对象。 | | DistributedDataObject| revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt; | 撤回已保存的数据对象。 |
## 开发步骤 ## 开发步骤
...@@ -82,11 +82,13 @@ ...@@ -82,11 +82,13 @@
以一次分布式数据对象同步为例,说明开发步骤。 以一次分布式数据对象同步为例,说明开发步骤。
1. 准备工作,导入@ohos.data.distributedDataObject模块到开发环境。 1. 准备工作,导入@ohos.data.distributedDataObject模块到开发环境。
```js ```js
import distributedObject from '@ohos.data.distributedDataObject'; import distributedObject from '@ohos.data.distributedDataObject';
``` ```
2. 请求权限。需要在`config.json`里面进行配置请求权限,示例代码如下: 2. 请求权限。需要在`config.json``module.json5`文件里进行配置请求权限,示例代码如下:
```
```json
{ {
"module": { "module": {
"reqPermissions": [ "reqPermissions": [
...@@ -96,8 +98,9 @@ ...@@ -96,8 +98,9 @@
] ]
} }
} }
``` ```
这个权限还需要在应用首次启动的时候弹窗获取用户授权,可以通过如下代码实现: 这个权限还需要在应用首次启动的时候弹窗获取用户授权,可以通过如下代码实现:
```js ```js
import featureAbility from '@ohos.ability.featureAbility'; import featureAbility from '@ohos.ability.featureAbility';
...@@ -110,34 +113,50 @@ ...@@ -110,34 +113,50 @@
}) })
console.info('end grantPermission'); console.info('end grantPermission');
} }
grantPermission(); grantPermission();
``` ```
3. 获取分布式数据对象实例。 3. 获取分布式数据对象实例。
以下为创建分布式数据对象的代码示例: 以下为创建分布式数据对象的代码示例:
```js ```js
var local_object = distributedObject.createDistributedObject({name:undefined, age:undefined, isVis:true, var local_object = distributedObject.createDistributedObject({
parent:undefined, list:undefined}); name: undefined,
age: undefined,
isVis: true,
parent: undefined,
list: undefined
});
var sessionId = distributedObject.genSessionId(); var sessionId = distributedObject.genSessionId();
``` ```
4. 加入同步组网。同步组网中的数据对象分为发起方和被拉起方。 4. 加入同步组网。同步组网中的数据对象分为发起方和被拉起方。
以下为加入同步组网的代码示例: 以下为加入同步组网的代码示例:
```js ```js
// 发起方 // 发起方
var local_object = distributedObject.createDistributedObject({name:"jack", age:18, isVis:true, var local_object = distributedObject.createDistributedObject({
parent:{mother:"jack mom", father:"jack Dad"}, list:[{mother:"jack mom"}, {father:"jack Dad"}]}); name: "jack",
age: 18,
isVis: true,
parent: { mother: "jack mom", father: "jack Dad" },
list: [{ mother: "jack mom" }, { father: "jack Dad" }]
});
local_object.setSessionId(sessionId); local_object.setSessionId(sessionId);
// 被拉起方 // 被拉起方
var remote_object = distributedObject.createDistributedObject({name:undefined, age:undefined, isVis:true, var remote_object = distributedObject.createDistributedObject({
parent:undefined, list:undefined}); name: undefined,
remote_object.setSessionId(sessionId); age: undefined,
isVis: true,
parent: undefined,
list: undefined
});
// 收到status上线后remote_object同步数据,即name变成jack,age是18 // 收到status上线后remote_object同步数据,即name变成jack,age是18
remote_object.setSessionId(sessionId);
``` ```
5. 监听对象数据变更。可监听对端数据的变更,以callback作为变更回调实例。 5. 监听对象数据变更。可监听对端数据的变更,以callback作为变更回调实例。
...@@ -162,19 +181,21 @@ ...@@ -162,19 +181,21 @@
6. 修改对象属性,对象属性支持基本类型(数字类型、布尔类型、字符串类型)以及复杂类型(数组、基本类型嵌套等)。 6. 修改对象属性,对象属性支持基本类型(数字类型、布尔类型、字符串类型)以及复杂类型(数组、基本类型嵌套等)。
以下为修改分布式数据对象属性的代码示例: 以下为修改分布式数据对象属性的代码示例:
```js ```js
local_object.name = "jack"; local_object.name = "jack";
local_object.age = 19; local_object.age = 19;
local_object.isVis = false; local_object.isVis = false;
local_object.parent = {mother:"jack mom", father:"jack Dad"}; local_object.parent = { mother: "jack mom", father: "jack Dad" };
local_object.list = [{mother:"jack mom"}, {father:"jack Dad"}]; local_object.list = [{ mother: "jack mom" }, { father: "jack Dad" }];
``` ```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** > **说明:**
> 针对复杂类型的数据修改,目前支持对根属性的修改,暂不支持对下级属性的修改。示例如下: > 针对复杂类型的数据修改,目前支持对根属性的修改,暂不支持对下级属性的修改。示例如下:
```js ```js
// 支持的修改方式 // 支持的修改方式
local_object.parent = {mother:"mom", father:"dad"}; local_object.parent = { mother: "mom", father: "dad" };
// 不支持的修改方式 // 不支持的修改方式
local_object.parent.mother = "mom"; local_object.parent.mother = "mom";
``` ```
...@@ -182,12 +203,14 @@ ...@@ -182,12 +203,14 @@
7. 访问对象。可以通过直接获取的方式访问到分布式数据对象的属性,且该数据为组网内的最新数据。 7. 访问对象。可以通过直接获取的方式访问到分布式数据对象的属性,且该数据为组网内的最新数据。
以下为访问对象的代码示例: 以下为访问对象的代码示例:
```js ```js
console.info("name " + local_object["name"]); console.info("name " + local_object["name"]);
``` ```
8. 删除监听数据变更。可以指定删除监听的数据变更回调;也可以不指定,这将会删除该分布式数据对象的所有数据变更回调。 8. 删除监听数据变更。可以指定删除监听的数据变更回调;也可以不指定,这将会删除该分布式数据对象的所有数据变更回调。
以下为取消监听数据变更的代码示例: 以下为取消监听数据变更的代码示例:
```js ```js
// 删除变更回调changeCallback // 删除变更回调changeCallback
local_object.off("change", changeCallback); local_object.off("change", changeCallback);
...@@ -196,6 +219,7 @@ ...@@ -196,6 +219,7 @@
``` ```
9. 监听分布式对象的上下线。可以监听对端分布式数据对象的上下线。 9. 监听分布式对象的上下线。可以监听对端分布式数据对象的上下线。
以下为访问对象的代码示例: 以下为访问对象的代码示例:
```js ```js
function statusCallback(sessionId, networkId, status) { function statusCallback(sessionId, networkId, status) {
this.response += "status changed " + sessionId + " " + status + " " + networkId; this.response += "status changed " + sessionId + " " + status + " " + networkId;
...@@ -206,57 +230,41 @@ ...@@ -206,57 +230,41 @@
10. 保存和撤回已保存的数据对象。 10. 保存和撤回已保存的数据对象。
1.callback方式 ```js
// 保存数据对象
```js g_object.save("local").then((result) => {
// 保存数据对象 console.info("save sessionId " + result.sessionId);
local_object.save("local", (result, data) => { console.info("save version " + result.version);
console.log("save callback"); console.info("save deviceId " + result.deviceId);
console.info("save sessionId " + data.sessionId); }, (result) => {
console.info("save version " + data.version); console.info("save local failed.");
console.info("save deviceId " + data.deviceId); });
}); // 撤回保存的数据对象
// 撤回保存的数据对象 g_object.revokeSave().then((result) => {
local_object.revokeSave((result, data) => { console.info("revokeSave success.");
console.log("revokeSave callback"); }, (result) => {
console.info("revokeSave sessionId " + data.sessionId); console.info("revokeSave failed.");
}); });
``` ```
2.Promise方式
```js
// 保存数据对象
g_object.save("local").then((result) => {
console.info("save sessionId " + result.sessionId);
console.info("save version " + result.version);
console.info("save deviceId " + result.deviceId);
}, (result)=>{
console.info("save local failed.");
});
// 撤回保存的数据对象
g_object.revokeSave().then((result) => {
console.info("revokeSave success.");
}, (result)=>{
console.info("revokeSave failed.");
});
```
11. 删除监听分布式对象的上下线。可以指定删除监听的上下线回调;也可以不指定,这将会删除该分布式数据对象的所有上下线回调。 11. 删除监听分布式对象的上下线。可以指定删除监听的上下线回调;也可以不指定,这将会删除该分布式数据对象的所有上下线回调。
以下为取消监听数据变更的代码示例: 以下为取消监听数据变更的代码示例:
```js
```js
// 删除上下线回调statusCallback // 删除上下线回调statusCallback
local_object.off("status", this.statusCallback); local_object.off("status", this.statusCallback);
// 删除所有的上下线回调 // 删除所有的上下线回调
local_object.off("status"); local_object.off("status");
``` ```
12. 退出同步组网。分布式对象退出组网后,本地的数据变更对端不会同步。 12. 退出同步组网。分布式对象退出组网后,本地的数据变更对端不会同步。
以下为退出同步组网的代码示例: 以下为退出同步组网的代码示例:
```js
local_object.setSessionId(""); ```js
``` local_object.setSessionId("");
```
## 相关实例 ## 相关实例
针对分布式数据对象,有以下相关实例可供参考: 针对分布式数据对象,有以下相关实例可供参考:
- [`DistributedNote`:分布式备忘录(eTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/data/DistributedNote) - [`DistributedNote`:分布式备忘录(eTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/data/DistributedNote)
- [`DistributedObjectDms`:分布式跑马灯(eTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/data/DistributedObjectDms) - [`DistributedObjectDms`:分布式跑马灯(eTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/data/DistributedObjectDms)
\ No newline at end of file
# 分布式数据对象概述 # 分布式数据对象概述
分布式数据对象管理框架是一款面向对象的内存数据管理框架。向应用开发者提供内存对象的创建、查询、删除、修改、订阅等基本数据对象的管理能力;同时具备分布式能力,满足超级终端场景下,相同应用多设备间的数据对象协同需求。 分布式数据对象管理框架是一款面向对象的内存数据管理框架。向应用开发者提供内存对象的创建、查询、删除、修改、订阅等基本数据对象的管理能力同时具备分布式能力,满足超级终端场景下,相同应用多设备间的数据对象协同需求。
## 基本概念 ## 基本概念
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
- 不同设备间只有相同bundleName的应用才能直接同步。 - 不同设备间只有相同bundleName的应用才能直接同步。
- 不建议创建过多分布式数据对象,每个分布式数据对象将占用100-150KB内存。 - 不建议创建过多分布式数据对象,每个分布式数据对象将占用100-150KB内存。
- 每个分布式数据对象大小不超过500KB。 - 每个分布式数据对象大小不超过500KB。
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
## 接口说明 ## 接口说明
具体分布式数据相关功能接口请见[分布式数据管理](../reference/apis/js-apis-distributed-data.md) 分布式数据相关功能接口请见[分布式数据管理](../reference/apis/js-apis-distributed-data.md)
**表1** 分布式数据服务关键API功能介绍 **表1** 分布式数据服务关键API功能介绍
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
| on(event:'dataChange',type:SubscribeType,observer:Callback&lt;ChangeNotification&gt;):void<br/>on(event:'syncComplete',syncCallback:Callback&lt;Array&lt;[string,number]&gt;&gt;):void | 订阅数据库中数据的变化。 | | on(event:'dataChange',type:SubscribeType,observer:Callback&lt;ChangeNotification&gt;):void<br/>on(event:'syncComplete',syncCallback:Callback&lt;Array&lt;[string,number]&gt;&gt;):void | 订阅数据库中数据的变化。 |
| sync(deviceIdList:string[],mode:SyncMode,allowedDelayMs?:number):void | 在手动模式下,触发数据库同步。 | | sync(deviceIdList:string[],mode:SyncMode,allowedDelayMs?:number):void | 在手动模式下,触发数据库同步。 |
## 开发步骤 ## 开发步骤
以单版本分布式数据库为例,说明开发步骤。 以单版本分布式数据库为例,说明开发步骤。
...@@ -40,26 +37,27 @@ ...@@ -40,26 +37,27 @@
2. 创建分布式数据库管理器实例。 2. 创建分布式数据库管理器实例。
以下为创建分布式数据库管理器的代码示例: 以下为创建分布式数据库管理器的代码示例:
```js ```js
let kvManager; let kvManager;
try { try {
const kvManagerConfig = { const kvManagerConfig = {
bundleName : 'com.example.datamanagertest', bundleName: 'com.example.datamanagertest',
userInfo : { userInfo: {
userId : '0', userId: '0',
userType : distributedData.UserType.SAME_USER_ID userType: distributedData.UserType.SAME_USER_ID
}
} }
distributedData.createKVManager(kvManagerConfig, function (err, manager) { }
if (err) { distributedData.createKVManager(kvManagerConfig, function (err, manager) {
console.log("createKVManager err: " + JSON.stringify(err)); if (err) {
return; console.log("createKVManager err: " + JSON.stringify(err));
} return;
console.log("createKVManager success"); }
kvManager = manager; console.log("createKVManager success");
}); kvManager = manager;
});
} catch (e) { } catch (e) {
console.log("An unexpected error occurred. Error: " + e); console.log("An unexpected error occurred. Error: " + e);
} }
``` ```
...@@ -69,27 +67,28 @@ ...@@ -69,27 +67,28 @@
2. 创建分布式数据库,建议关闭自动同步功能(`autoSync:false`),需要同步时主动调用`sync`接口。 2. 创建分布式数据库,建议关闭自动同步功能(`autoSync:false`),需要同步时主动调用`sync`接口。
以下为创建分布式数据库的代码示例: 以下为创建分布式数据库的代码示例:
```js ```js
let kvStore; let kvStore;
try { try {
const options = { const options = {
createIfMissing : true, createIfMissing: true,
encrypt : false, encrypt: false,
backup : false, backup: false,
autoSync : false, autoSync: false,
kvStoreType : distributedData.KVStoreType.SINGLE_VERSION, kvStoreType: distributedData.KVStoreType.SINGLE_VERSION,
securityLevel : distributedData.SecurityLevel.S0 securityLevel: distributedData.SecurityLevel.S0
}; };
kvManager.getKVStore('storeId', options, function (err, store) { kvManager.getKVStore('storeId', options, function (err, store) {
if (err) { if (err) {
console.log("getKVStore err: " + JSON.stringify(err)); console.log("getKVStore err: " + JSON.stringify(err));
return; return;
} }
console.log("getKVStore success"); console.log("getKVStore success");
kvStore = store; kvStore = store;
}); });
} catch (e) { } catch (e) {
console.log("An unexpected error occurred. Error: " + e); console.log("An unexpected error occurred. Error: " + e);
} }
``` ```
...@@ -100,6 +99,7 @@ ...@@ -100,6 +99,7 @@
4. 订阅分布式数据变化。 4. 订阅分布式数据变化。
以下为订阅单版本分布式数据库数据变化通知的代码示例: 以下为订阅单版本分布式数据库数据变化通知的代码示例:
```js ```js
kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) { kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) {
console.log("dataChange callback call data: " + JSON.stringify(data)); console.log("dataChange callback call data: " + JSON.stringify(data));
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
} }
console.log("put success"); console.log("put success");
}); });
}catch (e) { } catch (e) {
console.log("An unexpected error occurred. Error: " + e); console.log("An unexpected error occurred. Error: " + e);
} }
``` ```
...@@ -135,6 +135,7 @@ ...@@ -135,6 +135,7 @@
2. 从单版本分布式数据库中获取数据。 2. 从单版本分布式数据库中获取数据。
以下为从分布式数据库中查询字符串类型数据的代码示例: 以下为从分布式数据库中查询字符串类型数据的代码示例:
```js ```js
const KEY_TEST_STRING_ELEMENT = 'key_test_string'; const KEY_TEST_STRING_ELEMENT = 'key_test_string';
const VALUE_TEST_STRING_ELEMENT = 'value-test-string'; const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
...@@ -149,7 +150,7 @@ ...@@ -149,7 +150,7 @@
console.log("get success data: " + data); console.log("get success data: " + data);
}); });
}); });
}catch (e) { } catch (e) {
console.log("An unexpected error occurred. Error: " + e); console.log("An unexpected error occurred. Error: " + e);
} }
``` ```
...@@ -163,6 +164,7 @@ ...@@ -163,6 +164,7 @@
> 其中`deviceManager`模块的接口均为系统接口。 > 其中`deviceManager`模块的接口均为系统接口。
以下为单版本分布式数据库进行数据同步的代码示例: 以下为单版本分布式数据库进行数据同步的代码示例:
```js ```js
import deviceManager from '@ohos.distributedHardware.deviceManager'; import deviceManager from '@ohos.distributedHardware.deviceManager';
...@@ -182,7 +184,7 @@ ...@@ -182,7 +184,7 @@
try{ try{
// 1000表示最大延迟时间为1000ms // 1000表示最大延迟时间为1000ms
kvStore.sync(deviceIds, distributedData.SyncMode.PUSH_ONLY, 1000); kvStore.sync(deviceIds, distributedData.SyncMode.PUSH_ONLY, 1000);
}catch (e) { } catch (e) {
console.log("An unexpected error occurred. Error: " + e); console.log("An unexpected error occurred. Error: " + e);
} }
} }
......
...@@ -115,14 +115,15 @@ ...@@ -115,14 +115,15 @@
```js ```js
promise.then((preferences) => { promise.then((preferences) => {
let getPromise = preferences.get('startup', 'default'); let getPromise = preferences.get('startup', 'default');
getPromise.then((value) => { getPromise.then((value) => {
console.info("The value of 'startup' is " + value); console.info("The value of 'startup' is " + value);
}).catch((err) => { }).catch((err) => {
console.info("Failed to get the value of 'startup'. Cause: " + err); console.info("Failed to get the value of 'startup'. Cause: " + err);
}) })
}).catch((err) => { }).catch((err) => {
console.info("Failed to get preferences.")}); console.info("Failed to get preferences.")
});
``` ```
5. 数据持久化。 5. 数据持久化。
...@@ -138,24 +139,24 @@ ...@@ -138,24 +139,24 @@
应用订阅数据变化需要指定observer作为回调方法。订阅的Key的值发生变更后,当执行flush方法时,observer被触发回调。 应用订阅数据变化需要指定observer作为回调方法。订阅的Key的值发生变更后,当执行flush方法时,observer被触发回调。
```js ```js
var observer = function (key) { var observer = function (key) {
console.info("The key" + key + " changed."); console.info("The key" + key + " changed.");
} }
preferences.on('change', observer); preferences.on('change', observer);
preferences.put('startup', 'auto', function (err) { preferences.put('startup', 'auto', function (err) {
if (err) { if (err) {
console.info("Failed to put the value of 'startup'. Cause: " + err); console.info("Failed to put the value of 'startup'. Cause: " + err);
return; return;
} }
console.info("Succeeded in putting the value of 'startup'."); console.info("Succeeded in putting the value of 'startup'.");
preferences.flush(function (err) { preferences.flush(function (err) {
if (err) { if (err) {
console.info("Failed to flush. Cause: " + err); console.info("Failed to flush. Cause: " + err);
return; return;
} }
console.info("Succeeded in flushing."); // observer will be called. console.info("Succeeded in flushing."); // observer will be called.
}) })
}) })
``` ```
7. 删除指定文件。 7. 删除指定文件。
...@@ -163,12 +164,12 @@ ...@@ -163,12 +164,12 @@
使用deletePreferences方法从内存中移除指定文件对应的Preferences单实例,并删除指定文件及其备份文件、损坏文件。删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。删除后,数据及文件将不可恢复。 使用deletePreferences方法从内存中移除指定文件对应的Preferences单实例,并删除指定文件及其备份文件、损坏文件。删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。删除后,数据及文件将不可恢复。
```js ```js
let proDelete = data_preferences.deletePreferences(context, 'mystore'); let proDelete = data_preferences.deletePreferences(context, 'mystore');
proDelete.then(() => { proDelete.then(() => {
console.info("Succeeded in deleting."); console.info("Succeeded in deleting.");
}).catch((err) => { }).catch((err) => {
console.info("Failed to delete. Cause: " + err); console.info("Failed to delete. Cause: " + err);
}) })
``` ```
## 相关实例 ## 相关实例
针对首选项开发,有以下相关实例可供参考: 针对首选项开发,有以下相关实例可供参考:
......
...@@ -198,10 +198,10 @@ ...@@ -198,10 +198,10 @@
import data_rdb from '@ohos.data.rdb' import data_rdb from '@ohos.data.rdb'
const CREATE_TABLE_TEST = "CREATE TABLE IF NOT EXISTS test (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT NOT NULL, " + "age INTEGER, " + "salary REAL, " + "blobType BLOB)"; const CREATE_TABLE_TEST = "CREATE TABLE IF NOT EXISTS test (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT NOT NULL, " + "age INTEGER, " + "salary REAL, " + "blobType BLOB)";
const STORE_CONFIG = {name: "rdbstore.db"} const STORE_CONFIG = { name: "rdbstore.db" }
data_rdb.getRdbStore(this.context, STORE_CONFIG, 1, function (err, rdbStore) { data_rdb.getRdbStore(this.context, STORE_CONFIG, 1, function (err, rdbStore) {
rdbStore.executeSql(CREATE_TABLE_TEST) rdbStore.executeSql(CREATE_TABLE_TEST)
console.info('create table done.') console.info('create table done.')
}) })
``` ```
...@@ -215,7 +215,7 @@ ...@@ -215,7 +215,7 @@
```js ```js
var u8 = new Uint8Array([1, 2, 3]) var u8 = new Uint8Array([1, 2, 3])
const valueBucket = {"name": "Tom", "age": 18, "salary": 100.5, "blobType": u8} const valueBucket = { "name": "Tom", "age": 18, "salary": 100.5, "blobType": u8 }
let insertPromise = rdbStore.insert("test", valueBucket) let insertPromise = rdbStore.insert("test", valueBucket)
``` ```
...@@ -314,6 +314,7 @@ ...@@ -314,6 +314,7 @@
console.log('device=' + device[i] + 'data changed') console.log('device=' + device[i] + 'data changed')
} }
} }
try { try {
rdbStore.on('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, storeObserver) rdbStore.on('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, storeObserver)
} catch (err) { } catch (err) {
...@@ -364,9 +365,7 @@ ...@@ -364,9 +365,7 @@
(1) 调用数据库的备份接口,备份当前数据库文件。 (1) 调用数据库的备份接口,备份当前数据库文件。
(2) 调用数据库的恢复接口,从数据库的备份文件恢复数据库文件。 示例代码如下:
示例代码如下:
```js ```js
let promiseBackup = rdbStore.backup("dbBackup.db") let promiseBackup = rdbStore.backup("dbBackup.db")
...@@ -376,6 +375,10 @@ ...@@ -376,6 +375,10 @@
console.info('Backup failed, err: ' + err) console.info('Backup failed, err: ' + err)
}) })
``` ```
(2) 调用数据库的恢复接口,从数据库的备份文件恢复数据库文件。
示例代码如下:
```js ```js
let promiseRestore = rdbStore.restore("dbBackup.db") let promiseRestore = rdbStore.restore("dbBackup.db")
promiseRestore.then(() => { promiseRestore.then(() => {
......
...@@ -17,19 +17,19 @@ USB类开放能力如下,具体请查阅[API参考文档](../reference/apis/js ...@@ -17,19 +17,19 @@ USB类开放能力如下,具体请查阅[API参考文档](../reference/apis/js
| 接口名 | 描述 | | 接口名 | 描述 |
| -------- | -------- | | -------- | -------- |
| hasRight(deviceName:&nbsp;string):&nbsp;boolean | 如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。 | | hasRight(deviceName:string):boolean | 如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。 |
| requestRight(deviceName:&nbsp;string):&nbsp;Promise&lt;boolean&gt; | 请求给定软件包的临时权限以访问设备。 | | requestRight(deviceName:string):Promise&lt;boolean&gt; | 请求给定软件包的临时权限以访问设备。 |
| connectDevice(device:&nbsp;USBDevice):&nbsp;Readonly&lt;USBDevicePipe&gt; | 根据getDevices()返回的设备信息打开USB设备。 | | connectDevice(device:USBDevice):Readonly&lt;USBDevicePipe&gt; | 根据`getDevices()`返回的设备信息打开USB设备。 |
| getDevices():&nbsp;Array&lt;Readonly&lt;USBDevice&gt;&gt; | 返回USB设备的列表。 | | getDevices():Array&lt;Readonly&lt;USBDevice&gt;&gt; | 返回USB设备列表。 |
| setConfiguration(pipe:&nbsp;USBDevicePipe,&nbsp;config:&nbsp;USBConfig):&nbsp;number | 设置设备的配置。 | | setConfiguration(pipe:USBDevicePipe,config:USBConfig):number | 设置设备的配置。 |
| setInterface(pipe:&nbsp;USBDevicePipe,&nbsp;iface:&nbsp;USBInterface):&nbsp;number | 设置设备的接口。 | | setInterface(pipe:USBDevicePipe,iface:USBInterface):number | 设置设备的接口。 |
| claimInterface(pipe:&nbsp;USBDevicePipe,&nbsp;iface:&nbsp;USBInterface,&nbsp;force?:&nbsp;boolean):&nbsp;number | 获取接口。 | | claimInterface(pipe:USBDevicePipe,iface:USBInterface,force?:boolean):number | 获取接口。 |
|bulkTransfer(pipe:&nbsp;USBDevicePipe,&nbsp;endpoint:&nbsp;USBEndpoint,&nbsp;buffer:&nbsp;Uint8Array,&nbsp;timeout?:&nbsp;number):&nbsp;Promise&lt;number&gt; | 批量传输。 | |bulkTransfer(pipe:USBDevicePipe,endpoint:USBEndpoint,buffer:Uint8Array,timeout?:number):Promise&lt;number&gt; | 批量传输。 |
| closePipe(pipe:&nbsp;USBDevicePipe):&nbsp;number | 关闭设备消息控制通道。 | | closePipe(pipe:USBDevicePipe):number | 关闭设备消息控制通道。 |
| releaseInterface(pipe:&nbsp;USBDevicePipe,&nbsp;iface:&nbsp;USBInterface):&nbsp;number | 释放接口。 | | releaseInterface(pipe:USBDevicePipe,iface:USBInterface):number | 释放接口。 |
| getFileDescriptor(pipe:&nbsp;USBDevicePipe):&nbsp;number | 获取文件描述符。 | | getFileDescriptor(pipe:USBDevicePipe):number | 获取文件描述符。 |
| getRawDescriptor(pipe:&nbsp;USBDevicePipe):&nbsp;Uint8Array | 获取原始的USB描述符。 | | getRawDescriptor(pipe:USBDevicePipe):Uint8Array | 获取原始的USB描述符。 |
| controlTransfer(pipe:&nbsp;USBDevicePipe,&nbsp;contrlparam:&nbsp;USBControlParams,&nbsp;timeout?:&nbsp;number):&nbsp;Promise&lt;number&gt; | 控制传输。 | | controlTransfer(pipe:USBDevicePipe,contrlparam:USBControlParams,timeout?:number):Promise&lt;number&gt; | 控制传输。 |
## 开发步骤 ## 开发步骤
...@@ -115,7 +115,7 @@ USB设备可作为Host设备连接Device设备进行数据传输。开发示例 ...@@ -115,7 +115,7 @@ USB设备可作为Host设备连接Device设备进行数据传输。开发示例
打开对应接口,在设备信息(deviceList)中选取对应的interface。 打开对应接口,在设备信息(deviceList)中选取对应的interface。
interface1为设备配置中的一个接口。 interface1为设备配置中的一个接口。
*/ */
usb.claimInterface(pipe , interface1, true); usb.claimInterface(pipe, interface1, true);
``` ```
4. 数据传输。 4. 数据传输。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册