Glide 4.3.1:如何使用error()?

Glide 4.3.1: how to use error()?

首先,GlideGlideApp有什么区别?后者好像是自动生成的,但是步骤好像比较复杂所以我改用了Glide。他们似乎都有相同的方法。

所以,我用了Glide.with(activity).load(fileName).error().into(imageView)。问题是我无法理解传递给 error() 的内容。它没有采用可绘制资源 ID。 Android Studio 说参数是 RequestBuilder?,但我找不到任何示例。

"Error: Type mismatch: inferred type is Int but RequestBuilder< Drawable!>? was expected"

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

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

此外,如果您希望在滑行发生错误或完成时进行回调,您可以像这样创建一个侦听器。

 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)。

错误重载包括:

您在 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() : Error Drawables are shown when a request permanently fails. Error Drawables are also shown if the requested url/model is null and no fallback Drawable is set

GlideApp.with(fragment)
  .load(url)
  .error(R.drawable.error)
  .into(view);

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

如果你使用 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中提供多个Transformation,使用transforms()方法:

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

error() 和 placeholder() 使用 GlideApp-

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

要回答你的第二个问题,这个问题是标题的一部分,你真的只应该关心 error() 如果你期待你正在呼叫的 url 或 drawable/bitmap null 并且您可能想要调用重试,否则您可以使用 error 可绘制对象来表示与 placeholderfallback 不同的状态。下图解释得相当straight-forward: 很遗憾,我不记得图片的原始来源了。如果您知道,请在评论中告诉我,以便我可以正确地将其归于原作者!

从上图也可以看出,如果你不想为每个状态代表不同的状态,那么只设置一个占位符就足够了。

希望决策树能解决您的一些问题!抱歉,我没有回答你问题的所有部分,但其他一些答案已经回答了!

干杯!