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

14

我有一个Activity,在其中我下载了一个图片zip文件并解压缩到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_EXTERNALREAD_EXTERNAL权限。


你在测试安卓 N 吗? - Debanjan
不,我的Oneplus 2运行的是Android 6.0,没有这个功能。 - Stefan
你尝试使用Glide的loading listener了吗?可以参考这个链接https://stackoverflow.com/a/42067675/5492047并检查异常吗?此外,你还可以在这里找到一个非常棒的教程:https://futurestud.io/tutorials/glide-getting-started。 - Reyansh Mishra
如果 model.getThumbnail() 为空怎么办? - Satan Pandeya
“loc”和“imageloc”的日志输出是什么? - fluffyBatman
显示剩余4条评论
5个回答

18

这对我有用,创建一个文件实例并传递要加载到 ImageView 中的文件的 URI。

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;
            }

3

首先捕获您的图像路径,无论您是从相机捕获图像还是从图库选择图像(我假设您已经授予读写权限)。然后尝试以下操作:

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

在某些情况下,当您第一次加载图像时(或需要额外的时间),可能会出现图像未加载或显示的情况,因此使用 .dontAnimate()。希望这可以帮助。


2

你是否尝试使用Glide的加载监听器?

1.调试:

https://stackoverflow.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


0

试一下这个

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);

我正在获取相机和图库中的图像,请问我应该在哪里获取完美路径并将其设置到Glide中?目前我只能看到我的占位符路径为/storage/emulated/0/1586779115967.jpg。 - Arbaz.in

0

您需要运行时权限才能使用内部存储。其次,请使用最新的Glide库 compile 'com.github.bumptech.glide:glide:3.7.0' 并进行格式化

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

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