gpt4 book ai didi

java - Android 应用程序关闭后从设备中删除照片

转载 作者:行者123 更新时间:2023-12-02 02:24:42 25 4
gpt4 key购买 nike

编辑:我前一天问过类似的问题,我根据自该问题以来收集的信息写了这篇文章 - First Cache Question 。我知道它们很相似,但这个问题更简洁,以避免额外的信息。我也不想删除该帖子,因为它已得到答复,尽管答案还不够。

我使用 recyclerview 来显示从 googleplaces api 获取的照片。我知道我不允许在运行时之外合法地缓存照片。直到我随机打开手机图库看到很多从谷歌获得的照片副本时,我才知道发生了这种事。

我的第一个猜测是我对 Picasso 的使用出了问题,所以我添加了代码来修复它, .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)
在 StackOverflow 中找到这些内容非常简单,但这并没有解决任何问题,只是现在似乎只下载它们一次,尤其是当我删除它们时。我相信我消除了可能的问题,并概述了这个问题的最后一个问题。

 private Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}

@Override
public void onBindViewHolder(@NonNull VenueViewHolder venueViewHolder, int i) {
Collections.sort(vIAL, (o1, o2) -> o1.getVenueName().compareToIgnoreCase(o2.getVenueName()));
VenueItem currentItem = vIAL.get(i);

Picasso.with(context)
.load(getImageUri(context, currentItem.getVenueImage()))
.fit()
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(venueViewHolder.vIV);
venueViewHolder.vTV.setText(currentItem.getVenueName());
Log.i(TAG, "The photo should have been on screen");
}

URI 方法 getImageUri 是我发现的另一个问题的答案,我需要一个 URI 来实现 Picasso 库,以便我可以在显示照片之前对其进行操作。

我的问题是 - 应用程序关闭时如何删除照片?

更新:我改变了策略,看看会发生什么,并使用了 Glide

 @Override
public void onBindViewHolder(@NonNull VenueViewHolder venueViewHolder, int i) {
Collections.sort(vIAL, (o1, o2) -> o1.getVenueName().compareToIgnoreCase(o2.getVenueName()));
VenueItem currentItem = vIAL.get(i);

Glide.with(context)
.load(currentItem.getVenueImage())
.into(venueViewHolder.vIV);
venueViewHolder.vTV.setText(currentItem.getVenueName());
}

它给出了一个 fatal error

E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 4344032)

这是错误之一,第一次运行这个新代码时并没有发生,但第二次和第三次运行时情况变得更糟。

我根据@Padmini S早期得到的答案改变了我的代码,但他们在load部分使用了一个url,我传递了一个位图,因为我一生都无法弄清楚了解如何从 Google Places API 获取 URL 而不是它们提供的代码 Google Place Photos

我对编码还比较陌生,所以这是我试图拼凑出我需要学习的更多内容。我只是不知道要搜索什么,所以我在这里问,根据我从答案中收集到的新信息,我可以替换

MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "标题", null);

在我的代码中,这样我的照片就不会保存到手机的照片中?

最终更新我最终重写了很多围绕此的代码并删除了这段代码。我最终创建了一个 arraylist 类来在运行时期间保存数组列表,它让我删除了我出于无知而编写的大部分额外代码。

最佳答案

我真的不知道它是否能解决您的问题,但您将图像存储在此处的设备本地存储中,

private Uri getImageUri(Context inContext, Bitmap inImage) {

String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);

}

我从未使用过 google place api,但通常 api 会返回一个图像 url,您可以将该 url 存储在 POJO 类中,并将其直接显示在 recyclerview 行 ImageView 中,就像我在下面的代码中所做的那样,

public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i) {
viewHolder.description.setText(links.get(i).getTitle());
Glide.with(context).load(links.get(i).getImage_url()).into(viewHolder.image);
}

关于java - Android 应用程序关闭后从设备中删除照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com