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