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

3 4
本模块提供管理基本数据对象的相关能力,包括创建、查询、删除、修改、订阅等;同时支持相同应用多设备间的分布式数据对象协同能力。

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


## 导入模块

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

16
## distributedObject.create<sup>9+</sup>
L
li_juntao 已提交
17

18
create(context: Context, source: object): DistributedObjectV9
L
li_juntao 已提交
19

20
创建一个分布式数据对象。
W
wuyongning 已提交
21

22
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
23

W
wuyongning 已提交
24
**参数:**
25

L
li_juntao 已提交
26 27
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
28
  | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-Context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 |
29
  | source | object | 是 | 设置分布式数据对象的属性。 |
30
  
W
wuyongning 已提交
31
**返回值:**
32

G
ge-yafang 已提交
33 34
| 类型 | 说明 |
| -------- | -------- |
35
| [DistributedObjectV9](#distributedobjectv9) | 创建完成的分布式数据对象。 |
W
wuyongning 已提交
36 37

**示例:**
38

39 40
FA模型示例:

W
wufengshan 已提交
41
```js
42
// 导入模块
W
wufengshan 已提交
43
import distributedObject from '@ohos.data.distributedDataObject';
44 45 46 47 48
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
// 创建对象,该对象包含4个属性类型,string,number,boolean和Object
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
W
wufengshan 已提交
49
```
L
li_juntao 已提交
50

51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Stage模型示例:

```ts
// 导入模块
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
// 创建对象,该对象包含4个属性类型,string,number,boolean和Object
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
```
L
li_juntao 已提交
67

68
## distributedObject.genSessionId
L
li_juntao 已提交
69 70 71

genSessionId(): string

W
wuyongning 已提交
72
随机创建一个sessionId。
L
li_juntao 已提交
73

74
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
L
li_juntao 已提交
75

W
wuyongning 已提交
76
**返回值:**
77

L
li_juntao 已提交
78 79 80 81
  | 类型 | 说明 |
  | -------- | -------- |
  | string | 随机创建的sessionId。 |

W
wuyongning 已提交
82
**示例:**
83

W
wufengshan 已提交
84 85
```js
import distributedObject from '@ohos.data.distributedDataObject';
86
let sessionId = distributedObject.genSessionId();
W
wufengshan 已提交
87
```
L
li_juntao 已提交
88

89
## SaveSuccessResponse<sup>9+</sup>
90 91 92

save接口回调信息。

93
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
94 95 96 97 98 99 100

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

101
## RevokeSaveSuccessResponse<sup>9+</sup>
102 103 104

revokeSave接口回调信息。

105
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
106 107 108 109

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

111
## DistributedObjectV9
L
li_juntao 已提交
112

113
表示一个分布式数据对象。
114

115
### setSessionId<sup>9+</sup>
L
li_juntao 已提交
116

117
setSessionId(sessionId: string, callback: AsyncCallback&lt;void&gt;): void
L
li_juntao 已提交
118

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

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

123 124 125 126 127 128 129 130 131 132 133
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | sessionId | string | 是 | 分布式数据对象在可信组网中的标识ID。|
  | callback | AsyncCallback&lt;void&gt; | 是 | 加入session的异步回调。|

**错误码:**

Z
zengyawen 已提交
134
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
135

136
  | 错误码ID | 错误信息 |
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
  | -------- | -------- |
  | 15400001 | 创建内存数据库失败。|

**示例:**

FA模型示例

```js
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
```
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
```

### setSessionId<sup>9+</sup>

setSessionId(callback: AsyncCallback&lt;void&gt;): void

退出所有已加入的session。

**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | callback | AsyncCallback&lt;void&gt; | 是 | 退出所有已加入session的异步回调。 |

**错误码:**

Z
zengyawen 已提交
192
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
193

194
  | 错误码ID | 错误信息 |
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
  | -------- | -------- |
  | 15400001 | 创建内存数据库失败。|

**示例:**

FA模型示例

```js
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
// 退出分布式组网
g_object.setSessionId(() => {
    console.log("leave all lession.");
});
```
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId(), ()=>{
    console.log("join session");
});
// 退出分布式组网
g_object.setSessionId(() => {
    console.log("leave all lession.");
});
```

### setSessionId<sup>9+</sup>

setSessionId(sessionId?: string): Promise&lt;void&gt;

设置同步的sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。

**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。

**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
249

W
wuyongning 已提交
250
**参数:**
251

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

W
wuyongning 已提交
256
**返回值:**
257

258 259 260 261 262 263
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;void&gt; | Promise对象。|

**错误码:**

Z
zengyawen 已提交
264
  以下错误码的详细介绍参见[分布式数据对象错误码](../errorcodes/errorcode-distributed-dataObject.md)
265

266
  | 错误码ID | 错误信息 |
W
wuyongning 已提交
267
  | -------- | -------- |
268
  | 15400001 | 创建内存数据库失败。|
G
ge-yafang 已提交
269

W
wuyongning 已提交
270
**示例:**
271

272 273
FA模型示例

W
wufengshan 已提交
274 275
```js
import distributedObject from '@ohos.data.distributedDataObject';
276 277 278 279
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
“wangxiyue” 已提交
280
// g_object加入分布式组网
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
g_object.setSessionId(distributedObject.genSessionId()).then (()=>{
    console.log("join session.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
// 退出分布式组网
g_object.setSessionId().then (()=>{
    console.log("leave all lession.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
```
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// g_object加入分布式组网
g_object.setSessionId(distributedObject.genSessionId()).then (()=>{
    console.info("join session.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
// 退出分布式组网
g_object.setSessionId().then (()=>{
    console.log("leave all lession.");
    }).catch((error)=>{
        console.info("error:" + error.code + error.message);
});
W
wufengshan 已提交
318
```
L
li_juntao 已提交
319

320
### on('change')<sup>9+</sup>
L
li_juntao 已提交
321 322 323

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

324
监听分布式数据对象的数据变更。
L
li_juntao 已提交
325

326
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
L
li_juntao 已提交
327

W
wuyongning 已提交
328
**参数:**
329

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

W
wuyongning 已提交
335
**示例:**
336

337 338
FA模型示例

339
```js
340 341 342 343 344
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
345 346 347 348 349 350 351 352 353 354
globalThis.changeCallback = (sessionId, changeData) => {
    console.info("change" + sessionId);
    if (changeData != null && changeData != undefined) {
        changeData.forEach(element => {
        console.info("changed !" + element + " " + g_object[element]);
        });
    }
}
g_object.on("change", globalThis.changeCallback);
```
L
li_juntao 已提交
355

356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.changeCallback = (sessionId, changeData) => {
    console.info("change" + sessionId);
    if (changeData != null && changeData != undefined) {
        changeData.forEach(element => {
        console.info("changed !" + element + " " + g_object[element]);
        });
    }
}
g_object.on("change", globalThis.changeCallback);
```

### off('change')<sup>9+</sup>
L
li_juntao 已提交
381 382 383

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

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

386
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
387

W
wuyongning 已提交
388
**参数:**
389

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


W
wuyongning 已提交
396
**示例:**
397

398 399
FA模型示例

400
```js
401 402 403 404 405
import distributedObject from '@ohos.data.distributedDataObject';
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
“wangxiyue” 已提交
406
// 删除数据变更回调changeCallback
407
g_object.off("change", globalThis.changeCallback);
“wangxiyue” 已提交
408
// 删除所有的数据变更回调
409 410
g_object.off("change");
```
L
li_juntao 已提交
411

412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431
Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// 删除数据变更回调changeCallback
g_object.off("change", globalThis.changeCallback);
// 删除所有的数据变更回调
g_object.off("change");
```

### on('status')<sup>9+</sup>
L
li_juntao 已提交
432 433 434

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

435
监听分布式数据对象的上下线。
L
li_juntao 已提交
436

437
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
W
wuyongning 已提交
438

W
wuyongning 已提交
439
**参数:**
440

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

**示例:**
447

448 449
FA模型示例

450 451
```js
import distributedObject from '@ohos.data.distributedDataObject';
452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
g_object.on("status", globalThis.statusCallback);
```

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
474 475 476
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
477
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
478 479
g_object.on("status", globalThis.statusCallback);
```
L
li_juntao 已提交
480

481
### off('status')<sup>9+</sup>
L
li_juntao 已提交
482 483 484

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

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

487
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
L
li_juntao 已提交
488

W
wuyongning 已提交
489
**参数:**
490

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


W
wuyongning 已提交
497
**示例:**
498

499 500
FA模型示例

501 502
```js
import distributedObject from '@ohos.data.distributedDataObject'; 
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
// 删除上下线回调changeCallback
g_object.off("status",globalThis.statusCallback);
// 删除所有的上下线回调
g_object.off("status");
```

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject'; 
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
529 530 531
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
“wangxiyue” 已提交
532
// 删除上下线回调changeCallback
533
g_object.off("status",globalThis.statusCallback);
“wangxiyue” 已提交
534
// 删除所有的上下线回调
535 536
g_object.off("status");
```
537

538
### save<sup>9+</sup>
539 540 541 542 543 544 545 546 547 548 549 550 551

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

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

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

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

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

552
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
553 554

**参数:**
555

556 557 558
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | deviceId | string | 是 | 保存数据的deviceId,当deviceId为"local",代表存储在本地设备。 |
W
wufengshan 已提交
559
  | callback | AsyncCallback&lt;[SaveSuccessResponse](#savesuccessresponse9)&gt; | 是 | 回调函数。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。 |
560 561

**示例:**
562

W
wufengshan 已提交
563 564
```js
import distributedObject from '@ohos.data.distributedDataObject';
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
g_object.setSessionId("123456");
g_object.save("local", (status, result) => {
    console.log("save status = " + status);
    console.log("save callback");
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
});
```

```js
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
590
g_object.setSessionId("123456");
“wangxiyue” 已提交
591
g_object.save("local", (status, result) => {
W
wangxiyue 已提交
592
    console.log("save status = " + status);
W
wufengshan 已提交
593
    console.log("save callback");
W
wangxiyue 已提交
594 595 596
    console.info("save sessionId: " + result.sessionId);
    console.info("save version: " + result.version);
    console.info("save deviceId:  " + result.deviceId);
W
wufengshan 已提交
597 598
});
```
599

600
### save<sup>9+</sup>
601 602 603 604 605 606 607 608 609 610 611 612 613

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

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

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

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

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

614
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
615 616

**参数:**
617

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

W
wufengshan 已提交
622
**返回值:**
623 624 625

  | 类型 | 说明 |
  | -------- | -------- |
W
wufengshan 已提交
626
  | Promise&lt;[SaveSuccessResponse](#savesuccessresponse9)&gt; | Promise对象。返回SaveSuccessResponse,包含sessionId、version、deviceId等信息。|
627 628 629

**示例:**

W
wufengshan 已提交
630 631
```js
import distributedObject from '@ohos.data.distributedDataObject';
632 633 634
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
635
let g_object = distributedObject.create(context,{name:"Amy", age:18, isVis:false});
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656
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");
});
```

```js
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
657
let g_object = distributedObject.create(context,{name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
658
g_object.setSessionId("123456");
“wangxiyue” 已提交
659
g_object.save("local").then((result) => {
W
wufengshan 已提交
660 661 662 663
    console.log("save callback");
    console.info("save sessionId " + result.sessionId);
    console.info("save version " + result.version);
    console.info("save deviceId " + result.deviceId);
“wangxiyue” 已提交
664
}, () => {
W
wufengshan 已提交
665 666 667
    console.error("save failed");
});
```
668

669
### revokeSave<sup>9+</sup>
670

671
revokeSave(callback: AsyncCallback&lt;RevokeSaveSuccessResponse&gt;): void
672 673 674 675 676 677

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

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

678
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
679 680

**参数:**
681

682 683
  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
684
  | callback | AsyncCallback&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | 是 | 回调函数。返回RevokeSaveSuccessResponse,包含sessionId。 |
685 686 687

**示例:**

688 689
FA模型示例

W
wufengshan 已提交
690 691
```js
import distributedObject from '@ohos.data.distributedDataObject';
692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {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");
});
```

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
720
g_object.setSessionId("123456");
“wangxiyue” 已提交
721
g_object.revokeSave((result, data) => {
W
wufengshan 已提交
722 723 724
  console.log("revokeSave callback");
});
```
725

726
### revokeSave<sup>9+</sup>
727

728
revokeSave(): Promise&lt;RevokeSaveSuccessResponse&gt;
729 730 731 732 733 734

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

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

735
**系统能力:** SystemCapability.DistributedDataManager.DataObject.DistributedObject
736

W
wufengshan 已提交
737
**返回值:**
738 739 740

  | 类型 | 说明 |
  | -------- | -------- |
W
wufengshan 已提交
741
  | Promise&lt;[RevokeSaveSuccessResponse](#revokesavesuccessresponse9)&gt; | Promise对象。返回RevokeSaveSuccessResponse,包含sessionId。 |
742 743 744

**示例:**

745 746
FA模型示例

W
wufengshan 已提交
747 748
```js
import distributedObject from '@ohos.data.distributedDataObject';
749 750 751 752
import featureAbility from '@ohos.ability.featureAbility';
// 获取context
let context = featureAbility.getContext();
let g_object = distributedObject.create(context, {name:"Amy", age:18, isVis:false});
W
wufengshan 已提交
753
g_object.setSessionId("123456");
“wangxiyue” 已提交
754
g_object.revokeSave().then((result) => {
W
wufengshan 已提交
755 756
    console.log("revokeSave callback");
    console.log("sessionId" + result.sessionId);
“wangxiyue” 已提交
757
}, () => {
W
wufengshan 已提交
758 759 760
    console.error("revokeSave failed");
});
```
761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988

Stage模型示例

```ts
import distributedObject from '@ohos.data.distributedDataObject';
import Ability from '@ohos.application.Ability';
// 获取context
let context;
class MainAbility extends Ability{
    onWindowStageCreate(windowStage){
        context = this.context
    }
}
let g_object = distributedObject.create(context, {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");
});
```

## distributedObject.createDistributedObject<sup>(deprecated)</sup>

createDistributedObject(source: object): DistributedObject


创建一个分布式数据对象。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用distributedObject.create替代。

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | source | object | 是 | 设置分布式数据对象的属性。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| [DistributedObject](#distributedobjectdeprecated) | 创建完成的分布式数据对象。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';
// 创建对象,对象包含4个属性类型,string,number,boolean和Object
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
```

## DistributedObject<sup>(deprecated)</sup>

表示一个分布式数据对象。

### setSessionId<sup>(deprecated)</sup>

setSessionId(sessionId?: string): boolean

设置同步的sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[setSessionId](#setsessionid9)替代。

**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC。

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | sessionId | string | 否 | 分布式数据对象在可信组网中的标识ID。如果要退出分布式组网,设置为""或不设置均可。 |

**返回值:**

  | 类型 | 说明 |
  | -------- | -------- |
  | boolean | true:标识设置sessionId成功。 <br>false:标识设置sessionId失败。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';
let 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')<sup>(deprecated)</sup>

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

监听分布式数据对象的变更。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[on('change')](#onchange9)替代。

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

**参数:**

  | 参数名 | 类型 | 必填 | 说明 |
  | -------- | -------- | -------- | -------- |
  | type | string | 是 | 事件类型,固定为'change',表示数据变更。 |
  | callback | Callback<{ sessionId: string, fields: Array&lt;string&gt; }> | 是 | 变更回调对象实例。<br>sessionId:标识变更对象的sessionId; <br>fields:标识对象变更的属性名。 |

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';  
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.changeCallback = (sessionId, changeData) => {
    console.info("change" + sessionId);
    if (changeData != null && changeData != undefined) {
        changeData.forEach(element => {
        console.info("changed !" + element + " " + g_object[element]);
        });
    }
}
g_object.on("change", globalThis.changeCallback);
```

### off('change')<sup>(deprecated)</sup>

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

当不再进行数据变更监听时,使用此接口删除对象的变更监听。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[off('change')](#offchange9)替代。

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

**参数:**

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


**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';  
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
// 删除数据变更回调changeCallback
g_object.off("change", globalThis.changeCallback);
// 删除所有的数据变更回调
g_object.off("change");
```

### on('status')<sup>(deprecated)</sup>

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

监听分布式数据对象的上下线。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[on('status')](#onstatus9)替代。

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

**参数:**

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

**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject';
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
g_object.on("status", globalThis.statusCallback);
```

### off('status')<sup>(deprecated)</sup>

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

当不再进行对象上下线监听时,使用此接口删除对象的上下线监听。

> **说明:**
>
> 从 API Version 8 开始支持,从 API Version 9 开始废弃,建议使用[off('status')](#offstatus9)替代。

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

**参数:**

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


**示例:**

```js
import distributedObject from '@ohos.data.distributedDataObject'; 
let g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false, parent:{mother:"jack mom",father:"jack Dad"}});
globalThis.statusCallback = (sessionId, networkId, status) => {
    globalThis.response += "status changed " + sessionId + " " + status + " " + networkId;
}
// 删除上下线回调changeCallback
g_object.off("status",globalThis.statusCallback);
// 删除所有的上下线回调
g_object.off("status");
```