HarmonyOS 鸿蒙Next中一次性获取多个图片信息

HarmonyOS 鸿蒙Next中一次性获取多个图片信息

按照官方教程选择完图片后获取图片的信息,官方例子中 predicates 用的 equalTo,我想是否可以一次性获取多个图片的信息,所以用 in 试了下,发现 fetchResult 是 undefined,想问下是哪里有问题呢?

const PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
PhotoSelectOptions.maxSelectNumber = 9;

const photoPicker = new photoAccessHelper.PhotoViewPicker();
const result = await photoPicker.select(PhotoSelectOptions);
const photoUris = result.photoUris;

const predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
predicates.in(photoAccessHelper.PhotoKeys.URI, photoUris);

const fetchOptions: photoAccessHelper.FetchOptions = {
  fetchColumns: [photoAccessHelper.PhotoKeys.TITLE, photoAccessHelper.PhotoKeys.SIZE,
    photoAccessHelper.PhotoKeys.PHOTO_TYPE],
  predicates: predicates
};

const fetchResult = await this._photoAccessHelper.getAssets(fetchOptions)
let photoAssets: photoAccessHelper.PhotoAsset[] = await fetchResult.getAllObjects();

更多关于HarmonyOS 鸿蒙Next中一次性获取多个图片信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,可使用@ohos.file.picker模块的PhotoViewPicker一次性获取多张图片信息。具体实现如下:

import picker from '@ohos.file.picker';

let photoPicker = new picker.PhotoViewPicker();
photoPicker.select({
  maxSelectNumber: 5, // 最大选择数量
  MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE
}).then((uris) => {
  // uris为选择的图片URI数组
}).catch((err) => {
  console.error(`PhotoViewPicker failed: ${err}`);
});

该方法返回图片URI数组,通过URI可进一步获取图片详细信息。注意需在config.json中声明ohos.permission.READ_IMAGEVIDEO权限。

更多关于HarmonyOS 鸿蒙Next中一次性获取多个图片信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用in操作符获取多个图片信息时出现fetchResult为undefined的问题,可能是由于URI格式不匹配导致的。以下是关键点分析:

  1. photoUris数组中的URI格式需要与数据库中存储的格式完全一致(包括协议头和路径格式)

  2. 建议先检查photoUris内容是否正确:

console.log(JSON.stringify(photoUris));
  1. 替代方案可以改用or条件组合多个equalTo
const predicates = new dataSharePredicates.DataSharePredicates();
photoUris.forEach(uri => {
  predicates.or().equalTo(photoAccessHelper.PhotoKeys.URI, uri);
});
  1. 确保_photoAccessHelper已正确初始化并具有查询权限

如果问题仍然存在,建议先验证单个URI查询是否正常,再逐步扩展到多个URI查询。

回到顶部