Glide:获取Android/Java中缓存文件的位置

10

我正在使用Glide在我的应用程序中显示图片。现在我想知道Glide存储从URL下载的缓存图像的位置。

我正在使用以下代码来显示图片。

Glide.with(mContext)
            .load(mData.get(position).getImage())
            .centerCrop()
            .override(300, 300)
            .placeholder(R.drawable.default_small)
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .into(holder.ivCapturedImage);

1
搜索 android/data/{package name}/cache。 - masoud vali
我不确定这个,但它基于 Glide 如何设置缓存键,如果可以请标记此评论以便其他人知道,或者将其设置为答案是否更好? - masoud vali
3个回答

19

如果您正在使用Glide 4.8.0或更高版本,则可以使用此可用方法。

Kotlin:

val file: File = Glide.with(activity).asFile().load(url).submit().get()
val path: String = file.path

Java:

File file = Glide.with(activity).asFile().load(url).submit().get();
String path = file.getPath();

然后你可以获得一个类似于路径的东西

/data/user/0/{package_name}/cache/image_manager_disk_cache/64c0af382f0a4b41c5dd210a3e945283d91c93b1938ee546f00b9ded701a7e40.0

你能用Java回答吗? - Priyanka Singh
@PriyankaSingh 已添加 Java 版本。请注意,为了使代码看起来简洁,try catch 语句被排除在外。 - Joonsoo
@Joonsoo 我们能否从这个文件路径加载文件/图片到一个图片视图中? - undefined
1
@MuhammadHanzilah 是的,使用Glide.with(context).load(File(path)).into(imageView)我们可以加载并用于各种目的,比如分享文件。 - undefined
好的!谢谢。 - undefined

3
 private String getImgCachePath(String url) {
    FutureTarget<File> futureTarget = Glide.with(getBaseContext()).load(url).downloadOnly(100, 100);
    try {
        File file = futureTarget.get();
        String path = file.getAbsolutePath();
        return path;
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    return null;
}

参数url是图片的网络地址,100,100是缓存图片的宽度和高度,您可以根据需要进行更改。 然后,路径是缓存路径。


1
很好的发现!但我已经在使用上面的代码(请参见更新的问题)来显示图像。因此,你的答案会重新下载图像! - android_griezmann
你能用Java回答吗? - Priyanka Singh
不错!但是这种方法会导致Glide抛出java.lang.IllegalArgumentException: YOu must call this method on a background thread异常。请问我该如何解决? - Moz

0
  Runnable runnable = new Runnable() {
            @Override
            public void run() {
                FutureTarget<File> futureTarget = Glide.with(context).load(vLink).downloadOnly(100,100);
                try {
                    File file = futureTarget.get();
                    String path = file.getAbsolutePath();
                    System.out.println("Path video  = "+path +"File  = "+file);
                    if (path != null) {
                        Uri imageUri = Uri.parse(path);
                        Intent shareIntent = new Intent(Intent.ACTION_SEND);
                        shareIntent.putExtra(Intent.EXTRA_TEXT, "shareMessage");
                        shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                        shareIntent.setType("video/*");
                        context.startActivity(Intent.createChooser(shareIntent, "Share Image.."));
                    } else {
                        System.out.println("Image Uri = " + path + "\nResource = " + resource);
                    }
                } catch (ExecutionException | InterruptedException e) {
                e.printStackTrace();
            }
            }
        };
        new Thread(runnable).start();

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