Glide 4.3.1:如何使用error()函数?

23
首先,GlideGlideApp有什么区别?后者似乎是自动生成的,但步骤看起来很复杂,所以我使用了Glide。它们两个似乎都有相同的方法。
所以,我使用了 Glide.with(activity).load(fileName).error() .into(imageView)。问题是我不知道要传递什么给error()。它不接受drawable资源ID。 Android Studio显示参数是RequestBuilder< Drawable!>?但我找不到任何例子。
"错误: 类型不匹配:推断类型为Int,但需要RequestBuilder< Drawable!>?"
4个回答

47
如果您正在使用 Glide v4,那么您需要使用 RequestOptions 来包含您想要的更多选项,例如 centerCrop()placeholder()error()priority()diskCacheStrategy()。因此,在使用 RequestOptions 后,您的 Glide 将如下所示-
RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH);

Glide.with(mContext).load(imgUrl)
                    .apply(options)
                    .into(picThumbnail);

现在你可以展示错误图片,设置磁盘缓存等。

GlideApp 也是 Glide v4 的一部分。它被用来在 Glide v4 中使用 transforms() 方法提供多于一个的 Transformation

GlideApp.with(mContext)
  .load(imgUrl)
  .transforms(new CenterCrop(), new RoundedCorners(20))
  .into(target);

使用 GlideApp 处理 error()placeholder()

GlideApp.with(mContext)
            .load(imageUrl)
            .placeholder(R.drawable.placeholder_image)
            .error(R.drawable.error_image)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .priority(Priority.HIGH)
            .into(offerImage);

啊,谢谢。我想知道为什么在我搜索谷歌用法示例时没有出现这样的例子。 - Damn Vegetables
如果Glide无法加载图像,那么如何重新加载相同的URL以显示图像? - Anand Savjani

12
要回答你第二个问题,以及标题的一部分,如果你期望调用的网址或可绘制/位图为空,并且您可能想要重新尝试,则确实只应关心error() 。否则,你可以使用error可绘制对象来表示与placeholderfallback不同的状态。下面的图表说明得很清楚: 展示Glide调用三种可能失败情况的图表 很遗憾我无法记住图片的原始来源。如果您知道,请在评论中告诉我,这样我就可以正确地将其归属于原始作者!
正如你从上面的图表中所看到的那样,如果你不想为每个设置不同的状态,那么仅设置占位符就足够了。
希望这个决策树能解决你的一些问题!非常抱歉我没有回答你所有问题的部分,但其他答案已经回答了它们的一些部分!
干杯!

0

Glide希望您传递应该显示哪个图像可绘制对象,如果在加载图像时发生错误。除非您喜欢它,否则不需要此参数。我通常只使用。

 Glide.with(mContext).load(myModel.getDefaultThumbnailUrl()).dontAnimate().centerCrop().override(mImageSize, mImageSize).into(itemViewHolder.imgHolder);

如果您想在Glide发生错误或完成时进行回调,可以创建一个类似于这样的监听器。

 RequestListener<String, GlideDrawable> glideCallback = new RequestListener<String, GlideDrawable>(){
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            Toast.makeText(myActivity.this, getString(R.string.error_loading_from_url), Toast.LENGTH_LONG).show();
            return false;

        }
        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    convertCardToBitmap(mSendWhenComplete);

                }
            },500);

            return false;

        }

    };

然后在您的链接加载调用中包含.listener(glideCallback)。

错误重载包括:

enter image description here


1
是的,但如果获取图像失败,我想显示一个错误图像。网络上的所有示例都将资源ID传递给error(),但那些示例要么是Glide的旧版本,要么是GlideApp(而不是Glide)。 - Damn Vegetables
@DamnVegetables 请看上面的截图。我正在使用3.7.0版的Glide。 - Sam
如果您想要进行更多定制,请参考我的回调示例,以了解某些操作失败的情况。 - Sam

0

error()中指定一个可绘制对象,如果Glide抛出异常,则会显示该图像作为虚拟图像。在error()方法中指定的图像将是您项目的资源。

例如:

Glide.with(this)
            .load(urlImage)
            .error(R.drawable.error_image).into(new GlideDrawableImageViewTarget(imageView) {
                @Override
                public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
                    super.onResourceReady(drawable, anim);
                }
            });
error():当请求永久失败时,会显示错误可绘制对象。如果所请求的url/model为空且未设置任何备用可绘制对象,则也会显示错误可绘制对象。
GlideApp.with(fragment)
  .load(url)
  .error(R.drawable.error)
  .into(view);

或者

GlideApp.with(fragment)
  .load(url)
  .error(new ColorDrawable(Color.RED))
  .into(view);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接