HarmonyOS鸿蒙Next中photoAsset.get方法无效

HarmonyOS鸿蒙Next中photoAsset.get方法无效 对asset的get方法不是读取吗 为什么我加了photoTime 的赋值获取就获取不到资源了?

async saveToFile(uri: string) {
    this.timeArr.push(uri)
    AppStorage.set('times', this.timeArr)
    console.log("111222 需要的uri   " + uri)
    let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates()
    predicates.equalTo(photoAccessHelper.PhotoKeys.URI, uri)
    let fetchOptions: photoAccessHelper.FetchOptions = {
      fetchColumns: [photoAccessHelper.PhotoKeys.TITLE],
      predicates: predicates
    }
    try {
      let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext
      let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context)
      let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions)
      let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject()

      //获取时间
      this.photoTime = photoAsset.get(photoAccessHelper.PhotoKeys.DATE_ADDED_MS).toLocaleString()
      console.log("1111  time   " + this.photoTime)

      let requestOptions: photoAccessHelper.RequestOptions = {
        deliveryMode: photoAccessHelper.DeliveryMode.HIGH_QUALITY_MODE,
      }
      await photoAccessHelper.MediaAssetManager.requestImageData(context, photoAsset, requestOptions, this.handler)


      fetchResult.close()
    } catch (err) {
      let error:BusinessError = err as BusinessError
      console.log('1111 getAssets failed with err: ' + error.code + '  message:' + error.message)
    } //文件完全写入
  }

更多关于HarmonyOS鸿蒙Next中photoAsset.get方法无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

上面并没有查询DATE_ADDED_MS这个值,导致下面get时传入的参数无效,所以无法得到需要的结果。将代码更改一下即可:

async saveToFile(uri: string) {
    this.timeArr.push(uri)
    AppStorage.set('times', this.timeArr)
    console.log("111222 需要的uri   " + uri)
    let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates()
    predicates.equalTo(photoAccessHelper.PhotoKeys.URI, uri)
    let fetchOptions: photoAccessHelper.FetchOptions = {
        fetchColumns: [photoAccessHelper.PhotoKeys.TITLE,photoAccessHelper.PhotoKeys.DATE_ADDED_MS],
        predicates: predicates
    }
    try {
        let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext
        let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context)
        let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions)
        let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject()
        //获取时间
        this.photoTime = photoAsset.get(photoAccessHelper.PhotoKeys.DATE_ADDED_MS).toLocaleString()
        console.log("1111  time   " + this.photoTime)
        let requestOptions: photoAccessHelper.RequestOptions = {
            deliveryMode: photoAccessHelper.DeliveryMode.HIGH_QUALITY_MODE,
        }
        await photoAccessHelper.MediaAssetManager.requestImageData(context, photoAsset, requestOptions, this.handler)
        fetchResult.close()
    } catch (err) {
        let error:BusinessError = err as BusinessError
        console.log('1111 getAssets failed with err: ' + error.code + '  message:' + error.message)
    } //文件完全写入
}

更多关于HarmonyOS鸿蒙Next中photoAsset.get方法无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,photoAsset.get方法无效通常是由于API变更或权限问题导致。请检查以下方面:

  1. 确认使用的API版本与HarmonyOS Next SDK匹配,部分旧版API可能已被移除或更名。
  2. 确保已正确申请并获取相册访问权限(ohos.permission.READ_IMAGEVIDEO)。
  3. 验证photoAsset对象是否有效,可通过日志输出对象属性进行调试。
  4. 查阅HarmonyOS Next官方API文档,确认get方法的具体用法及参数要求。

问题出在 fetchColumns 的配置上。在 getAssetsFetchOptions 中,您只指定了 PhotoKeys.TITLE 这一个字段。

photoAsset.get 方法只能读取在 fetchColumns 中明确指定的字段。当您尝试获取 PhotoKeys.DATE_ADDED_MS 时,由于该字段未被包含在查询列中,get 方法将无法返回有效数据。

解决方案: 修改 fetchOptionsfetchColumns 数组,将您需要读取的字段(PhotoKeys.DATE_ADDED_MS)添加进去。

let fetchOptions: photoAccessHelper.FetchOptions = {
  fetchColumns: [
    photoAccessHelper.PhotoKeys.TITLE,
    photoAccessHelper.PhotoKeys.DATE_ADDED_MS // 添加此行
  ],
  predicates: predicates
}

关键点说明:

  1. 按需查询fetchColumns 定义了查询结果集中包含的元数据字段,这是一种性能优化机制,避免获取不必要的数据。
  2. get方法依赖:后续 photoAsset.get(key) 操作完全依赖于 fetchColumns 中包含的键值。查询中未包含的字段,get 方法将返回 undefined
  3. 最佳实践:在定义 fetchColumns 时,应预先规划好后续所有需要访问的 PhotoKeys 字段,一次性将其全部加入数组。

修改后,您的 photoAsset.get(photoAccessHelper.PhotoKeys.DATE_ADDED_MS) 调用即可正常获取到时间戳数据。

回到顶部