【问题标题】:How to catch Glide Exceptions Properly?如何正确捕获 Glide 异常?
【发布时间】:2019-03-20 12:31:36
【问题描述】:

我正在使用 Glide 4.x 并在 URL 返回 404 时收到 FileNotFoundException。我尝试使用 RequestListener 捕获异常。但它不是缓存这个异常。

GlideApp.with(getApplicationContext()).load(URL).placeholder(R.mipmap.ic_launcher).listener(new RequestListener<Drawable>() {
                            @Override
                            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                System.out.println("MainActivity.onLoadFailed"+e.getMessage());
                                return false;
                            }

                            @Override
                            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                                System.out.println("MainActivity.onResourceReady");
                                return false;
                            }
                        }).error(R.mipmap.ic_launcher).transform(new CircleCrop()).into(profileImage);

日志如下:

2019-03-20 17:48:07.134 32233-32233/com.zyta.zflikz W/Glide:加载 失败了 https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg 尺寸 [183x183] com.bumptech.glide.load.engine.GlideException 类:加载资源失败 有2个原因: java.io.FileNotFoundException(https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg) java.io.FileNotFoundException(https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg) 调用 GlideException#logRootCauses(String) 了解更多细节 原因(1 of 3):com.bumptech.glide.load.engine.GlideException 类:获取数据失败, 类 java.io.InputStream,远程 有1个原因: java.io.FileNotFoundException(https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg) 调用 GlideException#logRootCauses(String) 了解更多细节 原因(1 之 1):类 java.io.FileNotFoundException:https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg 原因(3 个中的 2 个):com.bumptech.glide.load.engine.GlideException 类:获取数据失败, 类 java.io.InputStream,远程 有1个原因: java.io.FileNotFoundException(https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg) 调用 GlideException#logRootCauses(String) 了解更多细节 原因(1 之 1):类 java.io.FileNotFoundException:https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg 原因(3 之 3):com.bumptech.glide.load.engine.GlideException 类:失败 LoadPath{StringUri->Object->Drawable},本地 原因(1 of 2):com.bumptech.glide.load.engine.GlideException 类:失败 解码路径{StringUri->Drawable->Drawable} 原因(2 之 2):com.bumptech.glide.load.engine.GlideException 类:失败 DecodePath{StringUri->Bitmap->Drawable} 2019-03-20 17:48:07.135 32233-32233/com.zyta.zflikz I/Glide:根本原因 (1 of 2) java.io.FileNotFoundException: https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251) 在 com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 在 com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:26) 在 com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:106) 在 com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:59) 在 com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) 在 com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) 在 com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:272) 在 com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 在 java.lang.Thread.run(Thread.java:764) 在 com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) 2019-03-20 17:48:07.137 32233-32233/com.zyta.zflikz I/Glide: 根 原因(2 之 2) java.io.FileNotFoundException: https://lh4.googleusercontent.com/-UxjwFuQRjXA/AAAAAAAAAAI/AAAAAAAAAAA/ACLGyWByUX_zz0_9075kpV4xIdPmN_dtNQ/s96-c/photo.jpg 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251) 在 com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 在 com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:26) 在 com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:106) 在 com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:59) 在 com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) 在 com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) 在 com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:397) 在 com.bumptech.glide.load.engine.SourceGenerator.onLoadFailed(SourceGenerator.java:119) 在 com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65) 在 com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62) 在 com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:302) 在 com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:272) 在 com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:233) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 在 java.lang.Thread.run(Thread.java:764) 在 com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446) 2019-03-20 17:48:07.138 32233-32233/com.zyta.zflikz I/System.out: MainActivity.onLoadFailed加载资源失败

如果有人对此有修复或替代解决方案,请告诉我。

【问题讨论】:

  • 你找到解决办法了吗?
  • @kdblue 我为此添加了解决方案。请检查。

标签: android-image filenotfoundexception android-glide


【解决方案1】:

此问题已通过在错误方法中从 Drawable 在本地图像中再次调用 Glide 得到解决。

Glide.with(mContext)
    .load(url)
    .placeholder(R.drawable.YourIconForPlaceholder)
    .error(R.drawable.YourIconWhenfailed)
    .into(imageView);

【讨论】:

  • 谢谢你。一个例子会更有帮助 Glide.with(this) .load(uri.toString()) .error(Glide.with(image_view).load(R.drawable.space)) .apply(RequestOptions.centerCropTransform()) .into(image_view);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2016-05-21
  • 2020-01-29
  • 2011-12-29
  • 2015-10-09
相关资源
最近更新 更多