• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import dataShare from '@ohos.data.dataShare'
17import dataSharePredicates from '@ohos.data.dataSharePredicates'
18import prompt from '@ohos.prompt'
19import Logger from '../util/Logger'
20
21const TAG: string = 'DateShareHelper'
22const BASE_URI = ('datashare:///ohos.samples.stagemodel.DataShare')
23const COLUMNS = ['*']
24
25class DataShareHelper {
26  private dataShareHelper: any
27
28  async getDataShareHelper(context) {
29    // 对应FA模型FeatureAbilityTest中的acquireDataAbilityHelper
30    this.dataShareHelper = await dataShare.createDataShareHelper(context, BASE_URI)
31  }
32
33  async insert() {
34    Logger.info(TAG, `insert onClick`)
35
36    if (this.dataShareHelper === null || this.dataShareHelper === undefined) {
37      Logger.info(TAG, `insert dataShareHelper = ${this.dataShareHelper}`)
38      return
39    }
40    let valuesBuckets = { name: 'Book name', introduction: 'Book introduction' }
41    let insertId = await this.dataShareHelper.insert(BASE_URI, valuesBuckets)
42    Logger.info(TAG, `insert succeed, data : ${insertId}`)
43    let resultSet = await this.queryAll()
44    return resultSet
45  }
46
47  async updateBook(book) {
48    let predicates = new dataSharePredicates.DataSharePredicates()
49    predicates.equalTo('id', book.id)
50    let valuesBucket = {
51      'name': book.name,
52      'introduction': book.introduction
53    }
54    let num = await this.dataShareHelper.update(BASE_URI, predicates, valuesBucket)
55    Logger.info(TAG + `update book num= ${num}`)
56    let resultSet = await this.queryAll()
57    return resultSet
58  }
59
60  async queryAll() {
61    Logger.info(TAG, `queryAll start`)
62    if (this.dataShareHelper === null || this.dataShareHelper === undefined) {
63      Logger.info(TAG, `queryAll dataShareHelper = ${this.dataShareHelper}`)
64      return
65    }
66    let predicates = new dataSharePredicates.DataSharePredicates()
67    let resultSet = await this.dataShareHelper.query(BASE_URI, predicates, COLUMNS)
68    Logger.info(TAG, `queryAll resultSet= ${JSON.stringify(resultSet)}`)
69    return resultSet
70  }
71
72  // 删除指定数据
73  async deleteBook(book) {
74    Logger.info(TAG, `deleteBook start`)
75    if (this.dataShareHelper === null || this.dataShareHelper === undefined) {
76      Logger.info(TAG, `deleteBook dataShareHelper = ${this.dataShareHelper}`)
77      return
78    }
79    let predicates = new dataSharePredicates.DataSharePredicates()
80    predicates.equalTo('id', book.id)
81    Logger.info(TAG, `delete id = ${book.id}`)
82    let num = await this.dataShareHelper.delete(BASE_URI, predicates)
83    await this.dataShareHelper.notifyChange(BASE_URI)
84    Logger.info(TAG, `delete num= ${num}`)
85    Logger.info(TAG, `delete queryAll start`)
86    let resultSet = await this.queryAll()
87    Logger.info(TAG, `delete queryAll end`)
88    return resultSet
89  }
90
91  // 用户给定的URI转换为服务端使用的URI时回调此接口,该方法可以选择性重写。对应FA模型的DataAbilityHelper中的normalizeUri
92  normalizeUri = () => {
93    this.dataShareHelper.normalizeUri(BASE_URI, (error, data) => {
94      if (error) {
95        Logger.info(TAG, `normalizeUri: ${error}`)
96      } else {
97        Logger.info(TAG, `normalizeUri: ${data}`)
98        prompt.showToast({
99          message: `normalizeUri sucess`
100        })
101      }
102    })
103  }
104
105  // 服务端使用的URI转换为用户传入的初始URI时服务端回调此接口,该方法可以选择性重写。对应FA模型的DataAbilityHelper中的denormalizeUri
106  denormalizeUri = () => {
107    this.dataShareHelper.denormalizeUri(BASE_URI, (err, data) => {
108      Logger.info(TAG, `denormalizeUri: ${err}`)
109      prompt.showToast({
110        message: `denormalizeUri: ${data}`
111      })
112    })
113  }
114
115  // 订阅指定URI对应数据的数据变更事件。若用户(订阅者)已注册了观察者,当有其他用户触发了变更通知时(调用了下文中的notifyChange方法),订阅者将会接收到callback通知。
116  // 对应FA模型的DataAbilityHelper中的on
117  on = async () => {
118    Logger.info(TAG, `on start`)
119    try {
120      await this.dataShareHelper.on('dataChange', BASE_URI, () => {
121        Logger.info(TAG, `on end`)
122        prompt.showToast({
123          message: `on success`
124        })
125      })
126    } catch (err) {
127      Logger.info(TAG, `[ttt] [DataAbilityTest] Observer on catch(err)====>:${err}`)
128    }
129  }
130
131  // 取消订阅指定URI对应的数据资源的变更通知。对应FA模型的DataAbilityHelper中的off
132  off = async () => {
133    Logger.info(TAG, `off start`)
134    try {
135      await this.dataShareHelper.off('dataChange', BASE_URI)
136      prompt.showToast({
137        message: `off success`
138      })
139      Logger.info(TAG, `off end`)
140    } catch (err) {
141      Logger.info(TAG, `[ttt] [DataAbilityTest] Observer off catch(err)====>:${err}`)
142    }
143  }
144
145  // 通知已注册的观察者Uri指定的数据资源的更改。对应FA模型的DataAbilityHelper中的notifyChange
146  notifyChange = () => {
147    this.dataShareHelper.notifyChange(BASE_URI, (err) => {
148      Logger.info(TAG, `notifyChange: ${err}`)
149      prompt.showToast({
150        message: `notifyChange`
151      })
152    })
153  }
154}
155
156export default new DataShareHelper()