
回复
本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前 API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。
在上一篇博客中,我们深入了解了HarmonyOS Next系统中Asset Store Kit的基础知识,包括其在关键资产存储和管理方面的重要地位、关键资产存储原理、访问控制机制以及各种关键资产属性等。这些基础知识为我们进一步探索关键资产存储操作奠定了坚实的基础。在本篇博客中,我们将深入实战,详细讲解如何在HarmonyOS Next中进行关键资产的存储操作,包括新增、查询、更新和删除等关键操作,帮助开发者更好地掌握这一重要功能。
import { asset } from '@kit.AssetStoreKit';
import { util } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
// 新增一个关键资产,包含密码和别名等属性
let attr: asset.AssetMap = new Map();
attr.set(asset.Tag.SECRET, stringToArray('newPassword123')); // 假设密码为"newPassword123"
attr.set(asset.Tag.ALIAS, stringToArray('newAssetAlias')); // 设置别名为"newAssetAlias"
attr.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.DEVICE_FIRST_UNLOCKED); // 设置为首次解锁后可访问
try {
asset.add(attr).then(() => {
console.info('Key asset added successfully.');
}).catch((err: BusinessError) => {
console.error('Failed to add key asset. Code is ${err.code}, message is ${err.message}');
});
} catch (error) {
let err = error as BusinessError;
console.error('Failed to add key asset. Code is ${err.code}, message is ${err.message}');
}
#include <string.h>
#include "asset/asset_api.h"
void AddAsset() {
static const char *SECRET = "newPassword123";
static const char *ALIAS = "newAssetAlias";
Asset_Blob secret = { (uint32_t)(strlen(SECRET)), (uint8_t *)SECRET };
Asset_Blob alias = { (uint32_t)(strlen(ALIAS)), (uint8_t *)ALIAS };
Asset_Attr attr[] = {
{.tag = ASSET_TAG_SECRET,.value.blob = secret },
{.tag = ASSET_TAG_ALIAS,.value.blob = alias },
{.tag = ASSET_TAG_ACCESSIBILITY,.value.uint32 = ASSET_ACCESSIBILITY_DEVICE_FIRST_UNLOCKED }
};
int32_t ret = OH_Asset_Add(attr, sizeof(attr) / sizeof(attr[0]));
if (ret == ASSET_SUCCESS) {
// Asset added successfully.
} else {
// Failed to add Asset.
}
}
查询参数 | 含义 | 用法示例 |
---|---|---|
ALIAS(别名) | 用于唯一标识关键资产的字符串 | 查询别名为"specificAlias"的关键资产:query.set(asset.Tag.ALIAS, stringToArray('specificAlias')); |
ACCESSIBILITY(访问控制等级) | 基于锁屏状态的访问控制设置 | 查询首次解锁后可访问的关键资产:query.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.FIRST_UNLOCKED); |
RETURN_TYPE(查询返回类型) | 指定查询返回结果的类型 | 查询返回所有类型的关键资产:query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); |
RETURN_LIMIT(查询返回数量限制) | 限制查询返回的关键资产数量 | 查询最多返回10个关键资产:query.set(asset.Tag.RETURN_LIMIT, 10); |
RETURN_OFFSET(查询返回偏移量) | 指定从第几个关键资产开始返回 | 从第20个关键资产开始查询,最多返回10个:query.set(asset.Tag.RETURN_OFFSET, 20); |
RETURN_ORDERED_BY(查询结果排序依据) | 按照附属信息排序查询结果 | 按照DATA_LABEL_NORMAL_1属性排序:query.set(asset.Tag.RETURN_ORDERED_BY, asset.Tag.DATA_LABEL_NORMAL_1); |
import { asset } from '@kit.AssetStoreKit';
import { util } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
// 查询别名为"searchAlias"且首次解锁后可访问的关键资产
let query: asset.AssetMap = new Map();
query.set(asset.Tag.ALIAS, stringToArray('searchAlias'));
query.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.FIRST_UNLOCKED);
try {
let res: Array<asset.AssetMap> = await asset.query(query);
for (let i = 0; i < res.length; i++) {
// 处理查询结果
console.log('Found asset:', res[i]);
}
} catch (error) {
let err = error as BusinessError;
console.error('Failed to query asset. Code is ${err.code}, message is ${err.message}');
}
import { asset } from '@kit.AssetStoreKit';
import { util } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
let query: asset.AssetMap = new Map();
query.set(asset.Tag.ALIAS, stringToArray('updateAlias')); // 根据别名找到要更新的关键资产
let attrsToUpdate: asset.AssetMap = new Map();
attrsToUpdate.set(asset.Tag.SECRET, stringToArray('newUpdatedPassword')); // 更新密码
attrsToUpdate.set(asset.Tag.DATA_LABEL_NORMAL_1, stringToArray('newUpdatedInfo')); // 更新普通附属信息
try {
asset.update(query, attrsToUpdate).then(() => {
console.info('Key asset updated successfully.');
}).catch((err: BusinessError) => {
console.error('Failed to update key asset. Code is ${err.code}, message is ${err.message}');
});
} catch (error) {
let err = error as BusinessError;
console.error('Failed to update key asset. Code is ${err.code}, message is ${err.message}');
}
import { asset } from '@kit.AssetStoreKit';
import { util } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
function stringToArray(str: string): Uint8Array {
let textEncoder = new util.TextEncoder();
return textEncoder.encodeInto(str);
}
let query: asset.AssetMap = new Map();
query.set(asset.Tag.ALIAS, stringToArray('deleteAlias')); // 指定要删除的关键资产的别名
try {
asset.remove(query).then(() => {
console.info('Key asset deleted successfully.');
}).catch((err: BusinessError) => {
console.error('Failed to delete key asset. Code is ${err.code}, message is ${err.message}');
});
} catch (error) {
let err = error as BusinessError;
console.error('Failed to delete key asset. Code is ${err.code}, message is ${err.message}');
}