滑动4.3.1:如何使用error()?

时间:2017-12-20 16:30:42

标签: android kotlin android-glide

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

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

"错误:类型不匹配:推断类型是Int但是RequestBuilder<可绘制!&GT ;?预期"

4 个答案:

答案 0 :(得分:34)

如果您使用 Glide v4 ,则必须使用 RequestOptions 来包含所需的更多选项,例如    centerCrop()占位符()错误()优先级() 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()方法提供多个转换

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

error()和占位符()

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

答案 1 :(得分:6)

要回答你的第二个问题而且那个是标题的一部分,你真的应该关心error(),如果你想要你正在调用的url或者drawable / bitmap是null并且你可能想调用一个重试,否则您可以使用error drawable来表示与placeholderfallback相比的不同状态。以下图表非常简单地解释了它: Diagram showcasing the three possible fail cases of a Glide call 不幸的是我记不起图像的原始来源了。如果您知道,请在评论中告诉我,我可以正确地将其归属于原作者!

正如您从上面的图表中看到的那样,如果您不想为每个人表示不同的状态,那么仅设置占位符就足够了。

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

干杯!

答案 2 :(得分:0)

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

错误重载包括:

enter image description here

答案 3 :(得分:0)

您在error()中指定了一个drawable,如果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);
                }
            });
  

错误():当请求永久失败时,会显示错误Drawables。错误   如果请求的url / model为null且为no,则还会显示Drawable   后备Drawable已设置

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

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