js-apis-data-distributedobject.md 13.3 KB
Newer Older
1
# 分布式数据对象
L
li_juntao 已提交
2

G
ge-yafang 已提交
3
> **说明:**
L
li_juntao 已提交
4 5 6 7 8 9
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。


## 导入模块

```js
G
ge-yafang 已提交
10
import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
11 12 13 14 15 16 17
```

## distributedDataObject.createDistributedObject

createDistributedObject(source: object): DistributedObject


W
wuyongning 已提交
18
创建一个分布式对象。
W
wuyongning 已提交
19

G
ge-yafang 已提交
20
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
21

W
wuyongning 已提交
22
**参数:**
L
li_juntao 已提交
23 24
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
W
wuyongning 已提交
25
  | source | object | 是 | 设置distributedObject的属性。 |
G
ge-yafang 已提交
26

W
wuyongning 已提交
27
**返回值:**
G
ge-yafang 已提交
28 29 30
| 类型 | 说明 |
| -------- | -------- |
| [DistributedObject](#distributedobject) | 创建完成的分布式对象。 |
W
wuyongning 已提交
31 32

**示例:**
L
li_juntao 已提交
33
  ```js
34
  import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
35 36 37 38 39 40 41 42 43 44
  // 创建对象,对象包含4个属性类型,string,number,boolean和Object
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, 
                 parent:{mother:"jack mom",father:"jack Dad"}});
  ```


## distributedObject.genSessionId()

genSessionId(): string

W
wuyongning 已提交
45
随机创建一个sessionId。
L
li_juntao 已提交
46

G
ge-yafang 已提交
47
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
L
li_juntao 已提交
48

W
wuyongning 已提交
49
**返回值:**
L
li_juntao 已提交
50 51 52 53
  | 类型 | 说明 |
  | -------- | -------- |
  | string | 随机创建的sessionId。 |

W
wuyongning 已提交
54
**示例:**
L
li_juntao 已提交
55
  ```js
56
  import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
57 58 59
  var sessionId = distributedObject.genSessionId();
  ```

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## SaveSuccessResponse

save接口回调信息。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。

| 名称 | 类型 | 说明 |
| -------- | -------- | -------- |
| sessionId | string | 多设备协同的唯一标识。 |
| version | number |已保存对象的版本。 |
| deviceId | string | 存储数据的设备号,标识需要保存对象的设备。默认为"local",标识本地设备;可自定义设置其他标识设备的字符串。 |

## RevokeSaveSuccessResponse

revokeSave接口回调信息。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。

| 名称 | 类型 | 说明 |
| -------- | -------- | -------- |
| sessionId | string | 多设备协同的唯一标识。 |
L
li_juntao 已提交
81 82 83 84

## DistributedObject

表示一个分布式对象。
85

L
li_juntao 已提交
86 87 88 89
### setSessionId

setSessionId(sessionId?: string): boolean

W
wuyongning 已提交
90
设置同步的sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。
L
li_juntao 已提交
91

92
**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。
W
wufengshan 已提交
93

G
ge-yafang 已提交
94
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
95

W
wuyongning 已提交
96
**参数:**
97

L
li_juntao 已提交
98 99
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
W
wuyongning 已提交
100 101
  | sessionId | string | 否 | 分布式对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |

W
wuyongning 已提交
102
**返回值:**
103

W
wuyongning 已提交
104 105
  | 类型 | 说明 |
  | -------- | -------- |
106
  | boolean | true:标识设置sessionId成功。 <br>false:标识设置sessionId失败。 |
G
ge-yafang 已提交
107

W
wuyongning 已提交
108
**示例:**
109

L
li_juntao 已提交
110
  ```js
111
  import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, 
                 parent:{mother:"jack mom",father:"jack Dad"}});
  //g_object加入分布式组网
  g_object.setSessionId(distributedObject.genSessionId());
  //设置为""退出分布式组网
  g_object.setSessionId("");
  ```


### on('change')

on(type: 'change', callback: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void

W
wuyongning 已提交
125
监听分布式对象的变更。
L
li_juntao 已提交
126

G
ge-yafang 已提交
127
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
L
li_juntao 已提交
128

W
wuyongning 已提交
129
**参数:**
L
li_juntao 已提交
130 131 132
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
W
wuyongning 已提交
133
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 是 | 变更回调对象实例。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
L
li_juntao 已提交
134

W
wuyongning 已提交
135
**示例:**
L
li_juntao 已提交
136
  ```js
137
  import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
138 139
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, 
                 parent:{mother:"jack mom",father:"jack Dad"}});
W
wuyongning 已提交
140 141 142 143 144 145 146 147
  g_object.on("change", function (sessionId, changeData) {
      console.info("change" + sessionId);  
      if (changeData != null && changeData != undefined) {
          changeData.forEach(element => {
              console.info("changed !" + element + " " + g_object[element]);
          });
      }
  });
L
li_juntao 已提交
148 149 150 151 152 153
  ```

### off('change')

off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array&lt;string&gt; }>): void

W
wuyongning 已提交
154
当不再进行数据变更监听时,使用此接口删除对象的变更监听。
L
li_juntao 已提交
155

G
ge-yafang 已提交
156
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
157

W
wuyongning 已提交
158
**参数:**
L
li_juntao 已提交
159 160 161
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
W
wufengshan 已提交
162
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 否 | 需要删除的数据变更回调,若不设置则删除该对象所有的数据变更回调。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |
L
li_juntao 已提交
163 164


W
wuyongning 已提交
165
**示例:**
L
li_juntao 已提交
166
  ```js
167
  import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
168 169
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, 
                 parent:{mother:"jack mom",father:"jack Dad"}});
170
  //删除数据变更回调changeCallback
W
wuyongning 已提交
171 172 173
  g_object.off("change", function (sessionId, changeData) {
      console.info("change" + sessionId);
  });
174
  //删除所有的数据变更回调
L
li_juntao 已提交
175 176 177 178 179 180 181
  g_object.off("change");
  ```

### on('status')

on(type: 'status', callback: Callback<{ sessionId: string, networkId: string, status: 'online' | 'offline' }>): void

W
wuyongning 已提交
182
监听分布式对象的上下线。
L
li_juntao 已提交
183

G
ge-yafang 已提交
184
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
W
wuyongning 已提交
185

W
wuyongning 已提交
186
**参数:**
L
li_juntao 已提交
187 188 189
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
190
  | callback | Callback<{ sessionId: string, networkId: string, status: 'online' \| 'offline' }> | 是 | 监听上下线回调实例。<br>sessionId:标识变更对象的sessionId; <br>networkId:标识对象设备,即deviceId; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
W
wuyongning 已提交
191 192

**示例:**
L
li_juntao 已提交
193
  ```js
194
  import distributedObject from '@ohos.data.distributedDataObject';
L
li_juntao 已提交
195 196
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, 
                 parent:{mother:"jack mom",father:"jack Dad"}});
197
  g_object.on("status", function (sessionId, networkId, status) {
L
li_juntao 已提交
198
      this.response += "status changed " + sessionId + " " + status + " " + networkId;
W
wuyongning 已提交
199
  });
L
li_juntao 已提交
200 201 202 203 204 205 206
  ```

### off('status')

off(type: 'status', callback?: Callback<{ sessionId: string, deviceId: string, status: 'online' | 'offline' }>): void


W
wuyongning 已提交
207
当不再进行对象上下线监听时,使用此接口删除对象的上下线监听。
L
li_juntao 已提交
208

G
ge-yafang 已提交
209
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。
L
li_juntao 已提交
210

W
wuyongning 已提交
211
**参数:**
L
li_juntao 已提交
212 213 214
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'status',表示对象上下线。 |
W
wuyongning 已提交
215
  | callback | Callback<{ sessionId: string, deviceId: string, status: 'online' \| 'offline' }> | 否 | 需要删除的上下线回调,若不设置则删除该对象所有的上下线回调。<br>sessionId:标识变更对象的sessionId; <br>deviceId:标识变更对象的deviceId; <br>status:标识对象为'online'(上线)或'offline'(下线)的状态。 |
L
li_juntao 已提交
216 217


W
wuyongning 已提交
218
**示例:**
L
li_juntao 已提交
219
  ```js
220
  import distributedObject from '@ohos.data.distributedDataObject'; 
L
li_juntao 已提交
221
  //删除上下线回调changeCallback
W
wuyongning 已提交
222 223 224
  g_object.off("status", function (sessionId, networkId, status) {
      this.response += "status changed " + sessionId + " " + status + " " + networkId;
  });
L
li_juntao 已提交
225 226 227
  //删除所有的上下线回调
  g_object.off("status");
  ```
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366

### save

save(deviceId: string, callback: AsyncCallback&lt;SaveSuccessResponse&gt;): void

保存分布式数据对象。使用callback方式异步回调。

对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。

有以下几种情况时,保存的数据将会被释放:

- 存储时间超过24小时。
- 应用卸载。
- 成功恢复数据之后。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。

**参数:**
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | deviceId | string | 是 | 保存数据的deviceId,当deviceId为"local",代表存储在本地设备。 |
  | callback | AsyncCallback&lt;[SaveSuccessResponse](#savesuccessresponse)&gt; | 是 | 回调函数。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。 |

**示例:**

  ```js
  import distributedObject from '@ohos.data.distributedDataObject';
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
  g_object.setSessionId("123456");
  g_object.save("local", (result)=>{
      console.log("save callback");
      console.info("save sessionId " + result.sessionId);
      console.info("save version " + result.version);
      console.info("save deviceId " + result.deviceId);
  });

  ```

### save

save(deviceId: string): Promise&lt;SaveSuccessResponse&gt;

保存分布式数据对象。使用Promise方式作为异步回调。

对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。

有以下几种情况时,保存的数据将会被释放:

- 存储时间超过24小时。
- 应用卸载。
- 成功恢复数据之后。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。

**参数:**
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | deviceId | string | 是 | 保存数据的设备号,当deviceId默认为"local",标识需要保存对象的设备。 |

  **返回值:**

  | 类型 | 说明 |
  | -------- | -------- |
  | Promise&lt;[SaveSuccessResponse](#savesuccessresponse)&gt; | Promise对象。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。|

**示例:**

  ```js
  import distributedObject from '@ohos.data.distributedDataObject';
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
  g_object.setSessionId("123456");
  g_object.save("local").then((result)=>{
      console.log("save callback");
      console.info("save sessionId " + result.sessionId);
      console.info("save version " + result.version);
      console.info("save deviceId " + result.deviceId);
  }, ()=>{
      console.error("save failed");
  });

  ```

### revokeSave

revokeSave(callback: AsyncCallback&lt;SaveSuccessResponse&gt;): void

撤回保存的分布式数据对象。使用callback方式作为异步方法。

如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。
如果对象保存在其他设备,那么将删除本地设备上的数据。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。

**参数:**
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | callback | AsyncCallback&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse)&gt; | 否 | 回调函数。返回RevokeSaveSuccessResponse,包含sessionId。 |

**示例:**

  ```js
  import distributedObject from '@ohos.data.distributedDataObject';
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
  g_object.setSessionId("123456");
  g_object.revokeSave((result, data) =>{
    console.log("revokeSave callback");
  });
  ```

### revokeSave

revokeSave(): Promise&lt;SaveSuccessResponse&gt;

撤回保存的分布式数据对象。使用Promise方式作为异步方法。

如果对象保存在本地设备,那么将删除所有受信任设备上所保存的数据。
如果对象保存在其他设备,那么将删除本地设备上的数据。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject。

  **返回值:**

  | 类型 | 说明 |
  | -------- | -------- |
  | Promise&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse)&gt; | Promise对象。返回RevokeSaveSuccessResponse,包含sessionId。 |

**示例:**

  ```js
  import distributedObject from '@ohos.data.distributedDataObject';
  var g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});
  g_object.setSessionId("123456");
  g_object.revokeSave("local").then((result)=>{
      console.log("revokeSave callback");
      console.log("sessionId" + result.sessionId);
  }, ()=>{
      console.error("revokeSave failed");
  });
  ```