这几天,碰到一个诡异的问题,发现原来Android上好好的图片,无法显示了。
经过代码比对,也一直找不到问题。
没办法,只好调试代码吧,发现让图片显示的程序为:
Glide.with(mContext).load(FileDataUrl + TaskImage + (position).getImg()).thumbnail(0.1f).into(myHolder.mimage);
于是,怀疑这部分代码是不是有问题。
查询相关说明:
Glide的使用说明如下:
Glide is an Image Loader Library for Android developed by bumptech and is a library that is recommended by Google. It has been used in many Google open source projects including Google I/O 2014 official application. It provides animated GIF support and handles image loading/caching.
翻译意思就是:Glide是Goolge推荐的图片处理函数。他提供了GIF支持,并可以操作图片的加载和缓存。
基本用法如下:
Glide.with(context).load(".png").override(300, 200).into(ivImg);
既然是出错了,那怎么判断出错了。
但Glide提供了一个说明:如果出错,不会直接报错;要想查看错误,必须配置错误监听函数。
如下:
Glide.with(mContext).load(Uri.parse(url)).error(R.drawable.ic_photo).thumbnail(0.1f).listener(new RequestListener<Uri, GlideDrawable>() {// 错误处理@Overridepublic boolean onException(Exception e, Uri model, Target<GlideDrawable> target, boolean isFirstResource) {e.printStackTrace();return false;}@Overridepublic boolean onResourceReady(GlideDrawable resource, Uri model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {return false;}}).into(myHolder.mimage);
其中,listner对应的为错误处理函数。
操作以后,果然在listner对应的onException函数里得到了错误消息,告诉网址无法访问。
如下:
: java.lang.Exception: Failed to load model: '相关地址'
: at com.SizeReady(GenericRequest.java:441)
: at com.quest.target.Size(ViewTarget.java:211)
: at com.quest.Size(ViewTarget.java:100)
: at com.quest.GenericRequest.begin(GenericRequest.java:272)
: at com.quest.ThumbnailRequestCoordinator.begin(ThumbnailRequestCoordinator.java:90)
: at com.bumptech.glide.sumeRequests(RequestTracker.java:83)
: at com.bumptech.sumeRequests(RequestManager.java:180)
: at com.bumptech.Start(RequestManager.java:203)
: at com.bumptech.glide.Start(ActivityFragmentLifecycle.java:50)
: at com.bumptech.glide.Start(SupportRequestManagerFragment.java:135)
: at android.support.v4.app.Fragment.performStart(Fragment.java:2265)
: at android.support.v4.veToState(FragmentManager.java:1369)
: at android.support.v4.veFragmentToExpectedState(FragmentManager.java:1574)
: at android.support.v4.veToState(FragmentManager.java:1641)
: at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:2966)
: at android.support.v4.app.FragmentController.dispatchStart(FragmentController.java:212)
: at android.support.v4.Start(FragmentActivity.java:560)
: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1446)
: at android.app.Activity.performStart(Activity.java:7990)
: at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3535)
: at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:237)
: at android.app.leToPath(TransactionExecutor.java:217)
: at android.app.uteLifecycleState(TransactionExecutor.java:189)
: at android.app.ute(TransactionExecutor.java:113)
: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2213)
: at android.os.Handler.dispatchMessage(Handler.java:107)
: at android.os.Looper.loop(Looper.java:238)
: at android.app.ActivityThread.main(ActivityThread.java:7864)
: at flect.Method.invoke(Native Method)
: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:998)
但比较奇怪的是:我自己把相关网址进行粘贴到IE或Chrome等浏览器里,把图片下载了下来。
大为困惑,满脸黑人问号???
于是,继续查资料:
查了好多资料后,终于在StackOverflow()上查询到这句话:
”For me the problem was with < or <. I changed it to < (all lower letters) and it worked.
Both Glide
and Picasso
had the same problem with it.“
也就是说:Glide和Picasso这种图片处理工具,都是只支持http开头的链接,不支持开头大写。
仔细查代码,发现本人在代码重构中,把http变成了首字母大写(Refactor的锅)。修改字符串为http后,发现图片能查看,问题解决。
PS:God or deveil is in the detail。只有真正了解一段代码,才可以完全运用这段代码。
本文发布于:2024-01-29 03:49:39,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647138212486.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |