HarmonyOS 鸿蒙Next 用户首选项实现数据持久化 相关问题
HarmonyOS 鸿蒙Next 用户首选项实现数据持久化 相关问题
preferences.deletePreferences: 从缓存中移出指定的Preferences实例,若Preferences实例有对应的持久化文件,则同时删除其持久化文件。使用callback异步回调。参考链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-preferences-V5#preferencesdeletepreferences
参考demo:
import { promptAction } from '@kit.ArkUI';
import { preferences } from '@kit.ArkData';
let context = getContext(this);
let preference: preferences.Preferences;
let preferenceTemp: preferences.Preferences;
// 对象类
export class ImageModel {
constructor(id: string, tokenInfo: string, imgInfo: string, urlInfo: string) {
this.id = id
this.token = tokenInfo
this.img = imgInfo
this.url = urlInfo
}
id?: string = '';
token: string = '';
img: string = '';
url: string = ''
}
// 首选项工具类
class PreferenceModel {
// 初始化
async getPreferencesFromStorage() {
try {
preference = await preferences.getPreferences(context, 'ImageUrlData.db');
} catch (err) {
console.error('[PreferenceModel]', `Failed to get preferences, Cause: ${err}`);
}
}
// 删除首选项
async deletePreferences() {
try {
await preferences.deletePreferences(context, 'ImageUrlData.db');
} catch (err) {
console.error('[PreferenceModel]', `Failed to delete preferences, Cause: ${err}`);
};
preference = preferenceTemp;
this.showToastMessage('删除数据库成功');
}
// 插入值
async putPreference(Image: string, ImageInfo: ImageModel) {
if (!preference) {
await this.getPreferencesFromStorage();
}
try {
await preference.put(Image, JSON.stringify(ImageInfo));
} catch (err) {
console.error('[PreferenceModel]', `Failed to put value, Cause: ${err}`);
}
await preference.flush();
}
// 获取值
async getPreference(Image: string) {
let ImageInfo = '';
if (!preference) {
await this.getPreferencesFromStorage();
}
try {
ImageInfo = (await preference.get(Image, '')).toString();
} catch (err) {
console.error('[PreferenceModel]', `Failed to get value, Cause: ${err}`);
}
if (ImageInfo === '') {
this.showToastMessage('数据为空,请先写入数据');
return;
}
this.showToastMessage('写入数据成功');
return JSON.parse(ImageInfo);
}
async getImageData(Image: string) {
return await this.getPreference(Image);
}
// 写入数据
writeData(Image: string, ImageInfo: ImageModel) {
this.putPreference(Image, ImageInfo);
this.showToastMessage('写入数据成功');
}
showToastMessage(message: string) {
promptAction.showToast({
message: message,
duration: 3000
});
};
/**
* 操作首选项
*/
export class LocalDataManager {
preferenceModel = new PreferenceModel()
private static localDataManager: LocalDataManager;
private constructor() {
this.preferenceModel.getPreferencesFromStorage()
}
static instance() {
if (!LocalDataManager.localDataManager) {
LocalDataManager.localDataManager = new LocalDataManager();
}
return LocalDataManager.localDataManager;
}
async queryImageInfo(Image: string) {
return await this.preferenceModel.getImageData(Image)
}
insertImageInfo(Image: string, ImageInfo: ImageModel) {
this.preferenceModel.writeData(Image, ImageInfo)
return Image.length
}
updateImageInfo(Image: string, ImageInfo: ImageModel) {
this.preferenceModel.writeData(Image, ImageInfo)
return Image.length
}
deleteImageInfo() {
this.preferenceModel.deletePreferences()
}
}
// 使用首选项做缓存
@Entry
@Component
struct NeiMengGuNongJi {
private localDataManager: LocalDataManager = LocalDataManager.instance();
@State token_Info: string = ''
private img: string = 'image00'
private url: string = 'url000'
@State num: number = 0
@State keyInfo: string = ''
@State imageData: ImageModel = new ImageModel('', '', '', '')
build() {
Column() {
Button('点击存入数据库')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
for (let i = 1; i <= 10; i++) {
let tokenInfo = "token00" + i
let image = this.img + i
let urlInfo = this.url + i
let ImageInfo = new ImageModel("", tokenInfo, image, urlInfo);
this.localDataManager.insertImageInfo(image, ImageInfo)
}
})
Button('删除首选项').width(100).height(100)
.onClick(() => {
this.localDataManager.deleteImageInfo()
})
TextInput({ placeholder: '输入key值:例如image001' })
.type(InputType.Normal)
.onChange((key: string) => {
this.keyInfo = key
})
Button('通过key值:' + this.keyInfo + ", 获取value值")
.fontSize(18)
.fontWeight(FontWeight.Bold)
.onClick(async () => {
if (this.keyInfo !== '') {
this.imageData = await this.localDataManager.queryImageInfo(this.keyInfo) as ImageModel
console.info("imageData=" + JSON.stringify(this.imageData))
}
})
Text("key: " + this.keyInfo + ", value: " + (this.imageData.token === '' ? '' : JSON.stringify(this.imageData)))
.fontSize(40)
}
.width('100%')
}
}
请确认deletePreferences的时候和getPreferences的context是否相同。
context不同,preferences对象就不是一个对象
更多关于HarmonyOS 鸿蒙Next 用户首选项实现数据持久化 相关问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,用户首选项的数据持久化通常通过特定的系统API或框架组件来实现,而非依赖传统编程语言(如Java或C语言)的内置功能。以下是实现数据持久化的基本步骤:
-
使用数据存储API:HarmonyOS提供了多种数据存储方式,如关系型数据库(SQLite)、轻量级数据存储(KeyValue Store)等。对于用户首选项,KeyValue Store可能是一个合适的选择,因为它简化了键值对的存储和检索过程。
-
数据写入:通过KeyValue Store的API,将用户首选项的数据以键值对的形式写入存储中。确保在写入过程中处理任何可能的异常或错误。
-
数据读取:在用户需要访问首选项时,通过相应的API从KeyValue Store中读取键值对。同样,需要处理读取过程中可能发生的异常。
-
数据更新与删除:提供机制以允许用户更新或删除首选项数据。这通常涉及修改现有的键值对或删除不再需要的键值对。
-
数据安全性:考虑数据的敏感性和安全性,确保在存储和读取过程中采取适当的保护措施。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。该地址提供了专业的技术支持和解决方案,可以帮助你解决HarmonyOS鸿蒙Next用户首选项数据持久化的相关问题。