首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Fresco SimpleDraweeView.setImageURI不适用于此http url

Android Fresco是Facebook开源的一款用于Android平台的图片加载库,它提供了高效的图片加载和显示功能。SimpleDraweeView是Fresco库中的一个自定义View,用于显示图片。

在使用Fresco的SimpleDraweeView的setImageURI方法加载图片时,如果传入的是一个http url,可能会出现不适用的情况。这是因为Fresco默认情况下不支持加载非安全的http图片,而是要求使用https协议来加载图片。

为了解决这个问题,可以通过以下几种方式来处理:

  1. 使用https协议的图片链接:推荐使用https协议的图片链接来加载图片,这样就可以直接使用setImageURI方法加载图片,而不会出现不适用的情况。
  2. 使用Fresco的ImageRequest:可以使用Fresco的ImageRequest来加载http图片。ImageRequest可以通过ImageRequestBuilder构建,指定图片的URI和其他参数,然后使用ImagePipeline的fetchDecodedImage方法来加载图片。

示例代码如下:

代码语言:txt
复制
Uri uri = Uri.parse("http://example.com/image.jpg");
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
        .build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setImageRequest(request)
        .setOldController(simpleDraweeView.getController())
        .build();
simpleDraweeView.setController(controller);
  1. 使用OkHttp或其他网络库加载图片:如果需要加载非安全的http图片,可以使用OkHttp或其他网络库来加载图片,然后将加载到的图片数据设置给SimpleDraweeView。

示例代码如下:

代码语言:txt
复制
Uri uri = Uri.parse("http://example.com/image.jpg");
Request request = new Request.Builder()
        .url(uri.toString())
        .build();
OkHttpClient client = new OkHttpClient();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        // 处理加载失败的情况
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        // 处理加载成功的情况
        ResponseBody body = response.body();
        if (body != null) {
            InputStream inputStream = body.byteStream();
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            simpleDraweeView.setImageBitmap(bitmap);
        }
    }
});

总结:Android Fresco的SimpleDraweeView.setImageURI方法默认情况下不适用于非安全的http图片链接。可以通过使用https协议的图片链接、使用Fresco的ImageRequest或使用OkHttp等网络库来加载图片来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券