Glide 无法从内部存储加载文件

Posted

技术标签:

【中文标题】Glide 无法从内部存储加载文件【英文标题】:Glide can't load file from internal storage 【发布时间】:2017-07-21 18:06:01 【问题描述】:

我有一个Activity,我在其中下载了一个图像压缩文件,然后在getFilesDir() 中解压缩。路径是这样的:

/data/user/0/packagename/files/files/example.png

但是,当我尝试加载这些图像时,它们没有显示。 我正在使用此代码来获取路径并加载图像:

   String loc = getFilesDir().getPath() + "/" + Config.IMAGES_LOCATION +"/";
   String imageloc = loc + model.getThumbnail();
   Glide.with(ActivityImageGallery.this).load(imageloc).into(image);

imageloc路径与保存位置相同,从该路径创建文件时显示会存在。

我尝试在路径前使用file://,但这也不起作用。 WRITE_EXTERNAL en READ_EXTERNAL 请求并授予权限。

【问题讨论】:

你在安卓 N 上测试吗? 在运行 android 6.0 的一加 2 上没有 您是否尝试使用此***.com/a/42067675/5492047 使用滑翔的加载侦听器并检查异常?和很棒的教程可以在这里找到深度futurestud.io/tutorials/glide-getting-started。 如果model.getThumbnail() 为空怎么办? locimageloc的日志输出是什么? 【参考方案1】:

这对我有用,创建文件实例并将您要加载的文件的 uri 传递到 ImageView

Glide.with(context)
    .load(new File(fileUri.getPath())) // Uri of the picture
    .into(profileAvatar);

确保您已添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

你也可以使用RequestListener来追踪错误以防失败

new RequestListener<String, GlideDrawable>() 
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) 
                return false;
            

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) 
                return false;
            

【讨论】:

【参考方案2】:

你有没有尝试使用这个来使用滑动的加载监听器

1.调试:-

https://***.com/a/42067675/5492047

Glide.with(getActivity())
 .load(args.getString(IMAGE_TO_SHOW))
 .listener(new RequestListener<String, GlideDrawable>() 
     @Override
     public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) 
         return false;
     

     @Override
     public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) 

         return false;
     
 )
 .into(imageFrame);

并检查异常?

2.再次调试。

您可以使用任何文件资源管理器应用程序并转到文件加载的确切位置并打开文件吗?

3.路径

路径中真的是 /files/files/ 吗?

4.扩展 你能从文件路径中删除.png并加载并检查吗?

5.教程

可以在这里找到一个很棒的深度教程https://futurestud.io/tutorials/glide-getting-started。

【讨论】:

【参考方案3】:

首先捕获您的图像路径,您是从相机捕获图像还是从图库中选择它(我假设您已经授予读写权限)。然后试试这个

Glide.with(context).load(new File(imagePath)).dontAnimate().error(R.drawable.errorImage).placeholder(R.drawable.placeholderImage).into(imageView);

使用.dontAnimate(),因为在某些情况下,当您第一次加载(或花费额外时间)时,图像可能没有加载或显示。 希望它会有所帮助。

【讨论】:

【参考方案4】:

试试这个

File c = new File(Environment.getExternalStorageDirectory() + "/data/user/0/packagename/files/files/example.png");
Glide.with(MainActivity.this).load(c).error(R.drawable.empty_pic).placeholder(R.drawable.empty_pic).into(image2);

或者试试这个

 Glide.with(getActivity()).load(new File(" your path").toString())
        .listener(new RequestListener<String, GlideDrawable>() 
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) 
                Log.e("xmx1","Error "+e.toString());
                return false;
            

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) 
                Log.e("xmx1","no Error ");
                return false;
            
        )
        .into(ivx);

【讨论】:

我正在获取图像相机和画廊你能告诉我在哪里可以获得完美的路径并将其设置为现在滑行我只看到我的占位符路径 = /storage/emulated/0 /1586779115967.jpg 像这样。【参考方案5】:

您需要运行时权限才能使用内部存储。第二次使用最新的 glide 库 编译'com.github.bumptech.glide:glide:3.7.0' 并格式化为

Glide.with(context).load(image path).into(Imageview);

【讨论】:

以上是关于Glide 无法从内部存储加载文件的主要内容,如果未能解决你的问题,请参考以下文章

我们可以使用雪花中的存储过程将文件从文件位置加载到命名内部阶段吗?

Android从内部存储读取文件非常慢

Android Glide:无法加载 Firebase 存储的资源

从统一android的内部存储无缝加载图像?

使用路径从文件内部存储目录中的 zip 获取文件

如何使用 Unity C# 从 android 内部存储访问图像和 3D 对象