HarmonyOS 鸿蒙Next ImageKnife自定义下载图片无效

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ImageKnife自定义下载图片无效

ImageKnife设置customGetImage 自定义下载图片无效,@Concurrent注解找不到引用,代码如下
ImageKnifeComponent({
imageKnifeOption: {
loadSrc: mediaItem?.thumbUrl,
objectFit: ImageFit.Cover,
border: { radius: 4 },
signature: mediaItem?.date.toString(),
customGetImage: this.custom,
onComplete: (event: EventImage | undefined) => {
console.log("==========ImageKnife onComplete loadingStatus=" + event?.loadingStatus)
}
}
})
// 自定义实现图片获取方法
@Concurrent
async custom(context: Context, src: string | PixelMap | Resource): Promise<ArrayBuffer | undefined> {
console.info(“ImageKnife:: custom download:” + src)
// 应用内文件获取缩略图
return MediaStorage.getInstance().getLocalThumb(context, src as string)
}

2 回复

升级下ide ohos/imageknife试下

import { ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife'
import { image } from '@kit.ImageKit';
import { fileIo as fs } from '@kit.CoreFileKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State pixelMap: PixelMap | undefined = undefined;
  localFile: string = getContext(this).filesDir + "/icon.png"

  aboutToAppear(): void {
    // 拷贝本地文件
    let icon: Uint8Array = getContext(this).resourceManager.getMediaContentSync($r("app.media.app_icon"));
    let file = fs.openSync(this.localFile, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
    fs.writeSync(file.fd, icon.buffer);
    fs.fsyncSync(file.fd);
    fs.closeSync(file);
    this.changePic(getContext().resourceManager.getMediaContentSync($r("app.media.startIcon"))
      .buffer as ArrayBuffer);
  }

  changePic(buffer: ArrayBuffer) {
    let imageSource: image.ImageSource = image.createImageSource(buffer);
    if (imageSource) {
      let decodingOptions: image.DecodingOptions = {
        editable: true,
      }
      imageSource.createPixelMap(decodingOptions, (err, pixelMap) => {
        this.pixelMap = pixelMap;
      })
    }
  }

  build() {
    Column() {

      // ImageKnifeComponent({
      // imageKnifeOption: new ImageKnifeOption({
      // loadSrc: $r("app.media.pic01"),
      // placeholderSrc: $r("app.media.app_icon"),
      // errorholderSrc: $r("app.media.app_icon"),
      // objectFit: ImageFit.Contain
      // })
      // }).width(100).height(100)

      //自定义下载图片
      //https: //www.openharmony.cn/xxx/xxx/logo.xx.png
      ImageKnifeComponent({
        imageKnifeOption: new ImageKnifeOption({
          loadSrc: "https://www.openharmony.cn/_nuxt/img/logo.dcf95b3.png",
          placeholderSrc: $r("app.media.app_icon"),
          errorholderSrc: $r("app.media.app_icon"),
          objectFit: ImageFit.Contain,
          customGetImage: custom,
        })
      }).width(100).height(100)


    }

  }
}

// 自定义下载方法
@Concurrent
async function custom(context: Context, src: string | PixelMap | Resource): Promise<ArrayBuffer | undefined> {
  console.info("ImageKnife:: custom download:" + src)
  // 举例写死从本地文件读取,也可以自己请求网络图片
  return context.resourceManager.getMediaContentSync($r("app.media.pic02").id).buffer as ArrayBuffer

}

针对您提到的HarmonyOS 鸿蒙Next中ImageKnife自定义下载图片无效的问题,可能的原因及解决方案如下:

  1. 初始化问题:确保ImageKnife已被正确初始化并注入到当前context中。可以通过ImageKnife.with(context)进行初始化。
  2. 配置问题:检查RequestOption对象是否配置正确,包括请求的URL、请求头(如User-Agent)等。确保URL有效且服务器允许该User-Agent访问。
  3. 缓存策略:检查缓存策略配置,确保没有错误地跳过内存缓存或磁盘缓存,这可能影响图片的下载和显示。
  4. 回调处理:在请求成功的回调中,确保正确处理了下载的图片数据。如果回调未触发或处理错误,图片将无法显示。

如果以上步骤均正确无误,但问题依旧存在,可能是系统或应用的其他配置问题。此时,建议详细检查相关配置,或尝试在开发者社区寻求帮助。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部