Android Glide 4.3.1:如何使用error()?

Android Glide 4.3.1:如何使用error()?,android,kotlin,android-glide,Android,Kotlin,Android Glide,首先,Glide和GlideApp的区别是什么?后者似乎是自动生成的,但步骤似乎很复杂,所以我使用了Glide。他们似乎都有相同的方法 因此,我使用了Glide.with(activity).load(fileName).error().into(imageView)。问题是我无法理解传递给error()的内容。它没有获取可绘制的资源ID。Android Studio说参数是RequestBuilder?,但我找不到任何例子 “错误:类型不匹配:推断类型为Int,但应为RequestBuilde

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

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


“错误:类型不匹配:推断类型为Int,但应为RequestBuilder

Glide希望您传递加载时发生错误时应显示的图像Drawable。除非您愿意,否则不需要此参数。我通常只使用

 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;

        }

    };
RequestListener glideCallback=newrequestlistener(){
@凌驾
公共布尔onException(异常e、字符串模型、目标、布尔isFirstResource){
Toast.makeText(myActivity.this、getString(R.string.error_loading_from_url)、Toast.LENGTH_LONG.show();
返回false;
}
@凌驾
公共布尔值onResourceReady(GlideDrawable资源、字符串模型、目标、布尔值isFromMemoryCache、布尔值isFirstResource){
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
convertCardToBitmap(完成时的mSendWhenComplete);
}
},500);
返回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():当请求永久失败时,将显示错误提取表。错误 如果请求的url/模型为null且为no,则也会显示Drawables 设置了可回退的回撤


如果您使用的是Glidev4,那么您必须使用RequestOptions来包含更多您想要的选项,例如 中心裁剪()占位符()错误()优先级()磁盘缓存策略()

所以在使用RequestOptions之后,你的滑翔看起来是这样的-

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也是GlideV4的一部分。它用于在Glide v4中使用transforms()方法提供多个转换

使用GlideApp时出现错误()和占位符()

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

要回答第二个问题(也是标题的一部分),如果您希望调用的url或drawable/bitmap为空,并且您可能希望调用重试,那么您只需要关心
error()
,否则,您可以使用
错误
drawable来表示与
占位符
回退
不同的状态。下表非常直接地解释了这一点: 不幸的是,我记不起图像的原始来源。请让我在评论中知道,如果你知道的话,这样我就可以正确地把它归于原作者

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

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


干杯

是的,但是如果获取图像失败,我想显示一个错误图像。web上的所有示例都将资源ID传递给error(),但这些示例要么是Glide的旧版本,要么是GlideApp(不是Glide)。@DamnVegetables请参见上面的屏幕截图。我使用的是3.7.0 Glide。如果你想做一些更自定义的事情,请参阅我的回调示例,了解一些失败的事情。啊。非常感谢。我想知道为什么当我在谷歌搜索一个使用示例时,这样的示例没有出现。如果glide无法加载图像,那么如何重新加载相同的URL来显示图像?
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.with(mContext)
  .load(imgUrl)
  .transforms(new CenterCrop(), new RoundedCorners(20))
  .into(target);
GlideApp.with(mContext)
            .load(imageUrl)
            .placeholder(R.drawable.placeholder_image)
            .error(R.drawable.error_image)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .priority(Priority.HIGH)
            .into(offerImage);