• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022-2023 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.promptAction'
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    } else {
40      Logger.info(TAG, `insert dataShareHelper ;dataShareHelper is ${this.dataShareHelper}`)
41    }
42    let valuesBuckets = { name: 'Book name', introduction: 'Book introduction' }
43    try {
44      let insertId = await this.dataShareHelper.insert(BASE_URI, valuesBuckets)
45      Logger.info(TAG, `insert succeed, data : ${insertId}`)
46      let resultSet = await this.queryAll()
47      return resultSet
48    } catch (err) {
49      Logger.error(TAG, `insert error= ${JSON.stringify(err)}`)
50    }
51
52  }
53
54  async updateBook(book) {
55    let predicates = new dataSharePredicates.DataSharePredicates()
56    predicates.equalTo('id', book.id)
57    let valuesBucket = {
58      'name': book.name,
59      'introduction': book.introduction
60    }
61    let num = await this.dataShareHelper.update(BASE_URI, predicates, valuesBucket)
62    Logger.info(TAG + `update book num= ${num}`)
63    let resultSet = await this.queryAll()
64    return resultSet
65  }
66
67  async queryAll() {
68    Logger.info(TAG, `queryAll start`)
69    if (this.dataShareHelper === null || this.dataShareHelper === undefined) {
70      Logger.info(TAG, `queryAll dataShareHelper = ${this.dataShareHelper}`)
71      return
72    }
73    Logger.info(TAG, `dataShareHelper not null`)
74    try {
75      let predicates = new dataSharePredicates.DataSharePredicates()
76      let resultSet = await this.dataShareHelper.query(BASE_URI, predicates, COLUMNS)
77      Logger.info(TAG, `queryAll resultSet= ${JSON.stringify(resultSet)}`)
78      return resultSet
79    } catch (err) {
80      Logger.error(TAG, `queryAll error= ${JSON.stringify(err)}`)
81    }
82
83  }
84
85  // 删除指定数据
86  async deleteBook(book) {
87    Logger.info(TAG, `deleteBook start`)
88    if (this.dataShareHelper === null || this.dataShareHelper === undefined) {
89      Logger.info(TAG, `deleteBook dataShareHelper = ${this.dataShareHelper}`)
90      return
91    }
92    let predicates = new dataSharePredicates.DataSharePredicates()
93    predicates.equalTo('id', book.id)
94    Logger.info(TAG, `delete id = ${book.id}`)
95    let num = await this.dataShareHelper.delete(BASE_URI, predicates)
96    await this.dataShareHelper.notifyChange(BASE_URI)
97    Logger.info(TAG, `delete num= ${num}`)
98    Logger.info(TAG, `delete queryAll start`)
99    let resultSet = await this.queryAll()
100    Logger.info(TAG, `delete queryAll end`)
101    return resultSet
102  }
103
104  // 用户给定的URI转换为服务端使用的URI时回调此接口,该方法可以选择性重写。对应FA模型的DataAbilityHelper中的normalizeUri
105  normalizeUri = () => {
106    this.dataShareHelper.normalizeUri(BASE_URI, (error, data) => {
107      if (error) {
108        Logger.info(TAG, `normalizeUri: ${error}`)
109      } else {
110        Logger.info(TAG, `normalizeUri: ${data}`)
111        prompt.showToast({
112          message: `normalizeUri sucess`
113        })
114      }
115    })
116  }
117
118  // 服务端使用的URI转换为用户传入的初始URI时服务端回调此接口,该方法可以选择性重写。对应FA模型的DataAbilityHelper中的denormalizeUri
119  denormalizeUri = () => {
120    this.dataShareHelper.denormalizeUri(BASE_URI, (err, data) => {
121      Logger.info(TAG, `denormalizeUri: ${err}`)
122      prompt.showToast({
123        message: `denormalizeUri: ${data}`
124      })
125    })
126  }
127
128  // 订阅指定URI对应数据的数据变更事件。若用户(订阅者)已注册了观察者,当有其他用户触发了变更通知时(调用了下文中的notifyChange方法),订阅者将会接收到callback通知。
129  // 对应FA模型的DataAbilityHelper中的on
130  on = async () => {
131    Logger.info(TAG, `on start`)
132    try {
133      await this.dataShareHelper.on('dataChange', BASE_URI, () => {
134        Logger.info(TAG, `on end`)
135        prompt.showToast({
136          message: `on success`
137        })
138      })
139    } catch (err) {
140      Logger.info(TAG, `[ttt] [DataAbilityTest] Observer on catch(err)====>:${err}`)
141    }
142  }
143
144  // 取消订阅指定URI对应的数据资源的变更通知。对应FA模型的DataAbilityHelper中的off
145  off = async () => {
146    Logger.info(TAG, `off start`)
147    try {
148      await this.dataShareHelper.off('dataChange', BASE_URI)
149      prompt.showToast({
150        message: `off success`
151      })
152      Logger.info(TAG, `off end`)
153    } catch (err) {
154      Logger.info(TAG, `[ttt] [DataAbilityTest] Observer off catch(err)====>:${err}`)
155    }
156  }
157
158  // 通知已注册的观察者Uri指定的数据资源的更改。对应FA模型的DataAbilityHelper中的notifyChange
159  notifyChange = () => {
160    this.dataShareHelper.notifyChange(BASE_URI, (err) => {
161      Logger.info(TAG, `notifyChange: ${err}`)
162      prompt.showToast({
163        message: `notifyChange`
164      })
165    })
166  }
167}
168
169export default new DataShareHelper()