Glide文件未找到异常:从互联网加载图像时没有内容提供程序

16

我制作了自己的REST API,现在它只有一个端点,我在那里展示一些图片。以下是在Spring Boot应用程序中的外观:

@GetMapping("/image/{name:.+}")
    public byte[] getImage(@PathVariable(value = "name") String name) {
        return storageService.loadFileAsByteArray(name);
    }

这是存储服务方法。

 public byte[] loadFileAsByteArray(String filename) {
            Resource resource = loadFile(filename);
            try {
                return IOUtils.toByteArray(resource.getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

这是我在我的安卓应用程序中所做的事情:

Glide.with(context!!.applicationContext).load("http://myipaddress/api/image/myimage.jpg").into(it)

这是我从Glide中得到的

根本原因(2个中的2)

java.io.FileNotFoundException: No content provider: http://myipaddress/api/image/myimage.jpg
                                                       at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1112)
                                                       at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:964)
                                                       at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:887)
                                                       at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:22)
                                                       at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:13)
                                                       at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44)
                                                       at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)
                                                       at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:299)
                                                       at com.bumptech.glide.load.engine.DecodeJob.onDataFetcherFailed(DecodeJob.java:394)
                                                       at com.bumptech.glide.load.engine.SourceGenerator.onLoadFailed(SourceGenerator.java:119)
                                                       at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:151)
                                                       at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:142)
                                                       at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65)
                                                       at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:97)
                                                       at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:148)
                                                       at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:142)
                                                       at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:65)
                                                       at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:97)
                                                       at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)
                                                       at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:299)
                                                       at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:269)
                                                       at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:230)
                                                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                       at java.lang.Thread.run(Thread.java:818)
                                                       at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446)

但如果我在浏览器中访问那个链接,一切都正常工作。为什么会出现这种情况?


2
同样的Glide 4.7.1版本。由于“没有内容提供者...”,图片无法加载。从WIFI切换到移动网络后,所有图片都可以正常加载(约25张)。再次切换回WIFI后,只有一张图片能够加载。所有后续尝试都会出现“没有内容提供者...”的错误提示。 - Elletlar
4
最新版本4.7.1存在此错误。您可以在https://github.com/bumptech/glide/issues/2894上跟踪并评论此问题。 - Dika
2个回答

6
如果你的目标是API 28及以上版本,且在Android 9上出现问题并且URL以http开头,则你的问题与明文传输有关,如网络安全配置中所述here

从Android 9.0 (API level 28)开始,默认情况下禁用了明文支持。

确保始终通过HTTPS进行所有连接,以保护敏感流量免受恶意网络攻击。

如果您想退出明文传输

只需在应用程序清单中添加此属性

<application
 . 
 android:usesCleartextTraffic="true"
 .

 >

 </application>

如果您想要为特定的域名设置规则

创建文件res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
    <domain includeSubdomains="true">secure.example.com</domain>
</domain-config>
</network-security-config>

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

-1

添加到 Gradle annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'


this is not an answer - Manoj Perumarath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接