我正在使用此代码从网络加载图像。
由于错误FileNotFound
,我同时发出多个请求,但文件实际上存在于服务器上。
因此,我想问一下,如果 Glide 失败,我该如何重试 Glide 请求?
public static void LoadNetworkImage(final Context context, final ImageView imageView, final String imageUrl) {
Glide.with(context).
load(imageUrl).
listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//if loading fails then again make request
LoadNetworkImage(context,imageView,imageUrl);
return true;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
}).
into(imageView);
}
我研究了How to retry image loading ,if Glide fails?的讨论,但没有帮助。
错误日志
最佳答案
这是库Weak Handler
1.将此库添加到build.gradle文件中。
2.代码如下。
代码
public static void LoadNetworkImage(final Context context, final ImageView imageView, final String imageUrl) {
final WeakHandler mHandler = new WeakHandler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
LoadNetworkImage(context, imageView,imageUrl);
}
};
Glide.with(context).
load(imageUrl).
transition(DrawableTransitionOptions.withCrossFade()).
listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
mHandler.postDelayed(runnable,1);
return true;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
}).
into(imageView);
}
注意
如果图像加载失败,则此代码将在1 MiiliSecond次失败后发送请求。仅在您说资源存在的情况下,这才对您而言效果最佳。
警告
但是,如果资源不存在,那么这不是最佳解决方案。因为递归将无限进行。