HarmonyOS鸿蒙Next中photoAccessHelper.PhotoViewPicker()选择图片时直接关掉选择窗口选择的图片清空了
HarmonyOS鸿蒙Next中photoAccessHelper.PhotoViewPicker()选择图片时直接关掉选择窗口选择的图片清空了
photoAccessHelper.PhotoViewPicker()选择图片时直接关掉选择窗口选择的图片清空了没找到对应的问题

更多关于HarmonyOS鸿蒙Next中photoAccessHelper.PhotoViewPicker()选择图片时直接关掉选择窗口选择的图片清空了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
当选择器数量为0时需要把缓存的图片地址数组重新赋值 问题解决

更多关于HarmonyOS鸿蒙Next中photoAccessHelper.PhotoViewPicker()选择图片时直接关掉选择窗口选择的图片清空了的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
选择图的时候关掉图片, 就是还没有执行上传相关逻辑, 此处你是不是应该加一个try catch 提示不行吗 ??
鸿蒙Next中PhotoViewPicker关闭窗口会清空选择结果。这是系统设计行为,选择器在取消或关闭时自动重置状态。如需保留数据,应在确认选择后立即处理返回的Uri列表。
根据您描述的现象,这是HarmonyOS Next中photoAccessHelper.PhotoViewPicker组件预期的标准行为。
核心原因分析:
PhotoViewPicker 是一个模态选择器(Modal Picker)。其设计逻辑是:当用户主动关闭选择器窗口(例如点击右上角关闭按钮、物理返回键或空白区域)时,此操作被视为取消选择。因此,选择器会直接退出并清空所有临时选中的图片,不会返回任何结果给调用方。
预期行为与代码逻辑: 这是为了明确区分用户“确认选择”与“取消操作”的两种意图。
- 用户确认选择:用户勾选图片后,必须点击界面上的“确定”或“完成”按钮。此时选择器才会关闭,并通过
pick()方法返回的Promise对象解析出用户选择的图片URI列表。 - 用户取消操作:用户直接关闭窗口,
pick()方法返回的Promise对象会以未返回有效结果的状态结束(通常你需要处理这种未选择的情况)。
解决方案: 您的代码需要处理用户取消选择的场景。标准的调用方式如下:
import photoAccessHelper from '@ohos.file.photoAccessHelper';
try {
let photoPicker = new photoAccessHelper.PhotoViewPicker();
// 配置选择器参数(可选)
photoPicker.selectType = photoAccessHelper.PhotoViewPickerTypes.IMAGE;
photoPicker.maxSelectNumber = 5; // 设置最多选择数量
// 启动选择器并等待结果
let uris = await photoPicker.pick();
// 用户点击了“完成”,uris为选择的图片URI数组
if (uris && uris.length > 0) {
// 处理选中的图片URI
console.info('PhotoViewPicker pick successfully, uris: ' + JSON.stringify(uris));
} else {
// 用户未选择任何图片即点击了完成(理论上不会进入,但建议判断)
console.info('User did not select any media.');
}
} catch (err) {
// 捕获异常,包括用户取消操作(直接关闭窗口)
console.error('PhotoViewPicker failed. Code: ' + err.code + ', message: ' + err.message);
}
关键点:
当用户直接关闭窗口时,await photoPicker.pick() 会抛出业务错误。您需要在 catch 块中捕获并处理这个错误(错误码通常对应用户取消),而不是期待返回一个空数组。这是与通过“完成”按钮返回空数组(未选图片)在逻辑上的根本区别。
因此,您遇到的现象并非Bug,而是组件设计如此。请确保您的应用代码妥善处理了 pick() 方法可能抛出的取消错误。

