bumptech / glide

An image loading and caching library for Android focused on smooth scrolling
https://bumptech.github.io/glide/
Other
34.57k stars 6.12k forks source link

svg from internet source fails to load #4745

Closed fullStackOasis closed 2 years ago

fullStackOasis commented 2 years ago

Glide Version: 4.13.0

Integration libraries: None. I am using your own example, the SVG sample code, so I'm just running ./gradlew :samples:svg:run

Device/Android Version: Galaxy A71 5G

Issue details / Repro steps / Use case background: In your SVG sample, you load an embedded SVG on the left side of the layout, and pull an SVG image from the internet on the right side of the layout.

Well, since the SVG image on the net is at an http (not https) location, it does not load. No surprise! It's a bad example, and that should be fixed... However, I replaced that image with a image from an https resource - https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/check.svg - in fact, I tried multiple SVG images from the w3.org site. And none of them would load. I'd always see the red x that indicates failure, or else I'd see the 3 dots indicating loading, but the remote svg would never load. I saw different exceptions in the logs.

Glide load line / GlideModule (if any) / list Adapter code (if any):

Glide.with...

Again - this is just your own sample code where I see the failure. I have a need for a library that will load an svg file from the internet and display it (in a RecyclerView). And I've been using Glide with great success up until now, when I needed it to load multiple svgs from the net.

Layout XML: Please see your own svg sample

Stack trace / LogCat:

This is the error when using an http resource:

Caused by: java.io.IOException: Cleartext HTTP traffic to www.clker.com not permitted

Well, yeah, again, no surprise that the sample's http url does not load.

But, here is an example when trying this url: https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/basura.svg

02-13 20:49:59.981  4145  6861 E GlideExecutor: Request threw uncaught throwable
02-13 20:49:59.981  4145  6861 E GlideExecutor: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.caverock.androidsvg.SVG$PathDefinition.enumeratePath(com.caverock.androidsvg.SVG$PathInterface)' on a null object reference
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVGAndroidRenderer$PathConverter.<init>(SVGAndroidRenderer.java:2394)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:972)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:298)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVGAndroidRenderer.renderChildren(SVGAndroidRenderer.java:330)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:584)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVGAndroidRenderer.renderDocument(SVGAndroidRenderer.java:267)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVG.renderToPicture(SVG.java:306)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.caverock.androidsvg.SVG.renderToPicture(SVG.java:282)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.samples.svg.SvgDrawableTranscoder.transcode(SvgDrawableTranscoder.java:22)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:61)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:535)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:499)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:485)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:430)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:394)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.SourceGenerator.onDataFetcherReady(SourceGenerator.java:238)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DataCacheGenerator.onDataReady(DataCacheGenerator.java:100)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.model.FileLoader$FileFetcher.loadData(FileLoader.java:72)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DataCacheGenerator.startNext(DataCacheGenerator.java:77)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:75)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:413)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at java.lang.Thread.run(Thread.java:923)
02-13 20:49:59.981  4145  6861 E GlideExecutor:         at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:372)
02-13 20:49:59.982  4145  4145 W Glide   : Load failed for https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/basura.svg with size [456x1346]
02-13 20:49:59.982  4145  4145 W Glide   : class com.bumptech.glide.load.engine.GlideException: Failed to load resource
02-13 20:49:59.982  4145  4145 W Glide   : There was 1 root cause:
02-13 20:49:59.982  4145  4145 W Glide   : java.lang.NullPointerException(Attempt to invoke virtual method 'void com.caverock.androidsvg.SVG$PathDefinition.enumeratePath(com.caverock.androidsvg.SVG$PathInterface)' on a null object reference)
02-13 20:49:59.982  4145  4145 W Glide   :  call GlideException#logRootCauses(String) for more detail
02-13 20:49:59.982  4145  4145 W Glide   :   Cause (1 of 1): class java.lang.NullPointerException: Attempt to invoke virtual method 'void com.caverock.androidsvg.SVG$PathDefinition.enumeratePath(com.caverock.androidsvg.SVG$PathInterface)' on a null object reference
02-13 20:49:59.982   953  6643 I HYPER-HAL: [ResourceManager.cpp]removeResource(): [CPUMinFreq] RemoveResource Request ID : 837897
02-13 20:49:59.982   953  6643 I HYPER-HAL: [RequestManager.cpp]releaseLocked(): Released ID : 837897
02-13 20:49:59.982  4145  4145 I Glide   : Root cause (1 of 1)
02-13 20:49:59.982  4145  4145 I Glide   : java.lang.NullPointerException: Attempt to invoke virtual method 'void com.caverock.androidsvg.SVG$PathDefinition.enumeratePath(com.caverock.androidsvg.SVG$PathInterface)' on a null object reference
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVGAndroidRenderer$PathConverter.<init>(SVGAndroidRenderer.java:2394)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:972)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:298)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVGAndroidRenderer.renderChildren(SVGAndroidRenderer.java:330)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVGAndroidRenderer.render(SVGAndroidRenderer.java:584)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVGAndroidRenderer.renderDocument(SVGAndroidRenderer.java:267)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVG.renderToPicture(SVG.java:306)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.caverock.androidsvg.SVG.renderToPicture(SVG.java:282)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.samples.svg.SvgDrawableTranscoder.transcode(SvgDrawableTranscoder.java:22)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodePath.decode(DecodePath.java:61)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.LoadPath.loadWithExceptionList(LoadPath.java:76)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.LoadPath.load(LoadPath.java:57)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.runLoadPath(DecodeJob.java:535)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.decodeFromFetcher(DecodeJob.java:499)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.decodeFromData(DecodeJob.java:485)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.decodeFromRetrievedData(DecodeJob.java:430)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherReady(DecodeJob.java:394)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.SourceGenerator.onDataFetcherReady(SourceGenerator.java:238)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DataCacheGenerator.onDataReady(DataCacheGenerator.java:100)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.model.FileLoader$FileFetcher.loadData(FileLoader.java:72)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DataCacheGenerator.startNext(DataCacheGenerator.java:77)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:75)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:280)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
02-13 20:49:59.982  4145  4145 I Glide   :      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
02-13 20:49:59.982  4145  4145 I Glide   :      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:413)
02-13 20:49:59.982  4145  4145 I Glide   :      at java.lang.Thread.run(Thread.java:923)
02-13 20:49:59.982  4145  4145 I Glide   :      at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:372)
02-13 20:49:59.983  6778  6778 W DIAGMON_SDK[605034]: UncaughtExceptionLogging can't be enabled because Configuration is null

When I tried this less complex svg, I just saw the 3 dots loading indicator in the sample app, and no exception in logcat: https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/cc.svg

screen

I appreciate your work, and any help you can offer to fix this problem. Thanks!

sjudd commented 2 years ago

The SVG sample is meant to show you how to integrate a third party library, it's not an official integration library in its own right (those are under integration/).

I'm not entirely sure, but it looks like the SVG library the sample is using can't handle these files. Have you tried updating it to a newer version? Assuming it's still being maintained it should just be incrementing the version number here: https://github.com/bumptech/glide/blob/6ba4b548cae12f3aa53634a59025069834c0ea14/samples/svg/build.gradle#L6

fullStackOasis commented 2 years ago

@sjudd Thank you! I switched the line from

implementation 'com.caverock:androidsvg:1.2.1'

to

implementation 'com.caverock:androidsvg-aar:1.4'

and ran ./gradlew :samples:svg:run and now the demo works.