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()