Glide 4.3.1:如何使用error()?
Glide 4.3.1: how to use error()?
首先,Glide
和GlideApp
有什么区别?后者好像是自动生成的,但是步骤好像比较复杂所以我改用了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
可绘制对象来表示与 placeholder
或 fallback
不同的状态。下图解释得相当straight-forward:
很遗憾,我不记得图片的原始来源了。如果您知道,请在评论中告诉我,以便我可以正确地将其归于原作者!
从上图也可以看出,如果你不想为每个状态代表不同的状态,那么只设置一个占位符就足够了。
希望决策树能解决您的一些问题!抱歉,我没有回答你问题的所有部分,但其他一些答案已经回答了!
干杯!
首先,Glide
和GlideApp
有什么区别?后者好像是自动生成的,但是步骤好像比较复杂所以我改用了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
可绘制对象来表示与 placeholder
或 fallback
不同的状态。下图解释得相当straight-forward:
从上图也可以看出,如果你不想为每个状态代表不同的状态,那么只设置一个占位符就足够了。
希望决策树能解决您的一些问题!抱歉,我没有回答你问题的所有部分,但其他一些答案已经回答了!
干杯!