个人资料图片上传者并用毕加索加载它

问题描述 投票:0回答:6

我有一个Android应用程序,其中包含个人资料图片用户可以编辑他/她的个人资料图像。我正在使用Picasso来加载图像,但每次加载配置文件图像时,Picasso都会加载旧图像。

当我上传个人资料图片时,我不会更改它的网址,因此每个用户的个人资料图片网址都是不变的。

第一个问题:每次用户更改个人资料图片时,我应该更改个人资料图片网址吗

第二个问题:当用户更改他/她的个人资料图像时,我使用此代码使Picasso无效以加载新图像:

picassoInstance.load(url)
  .networkPolicy(NetworkPolicy.NO_CACHE)
  .transform(new CircleTransform())
  .placeholder(dr)
  .into(imageView);

但毕加索给我看了一个旧的。还有一件事:我首先将图片网址加载到imageView而不调用networkPolicy方法。我该如何处理这个问题?

android picasso
6个回答
1
投票

每张图片都有不同的名称,每当上传新图片时,您都必须更新图片网址

例如。当前网址:https://photographylife.com/nikon-d810-high-resolution-image-samples

其中图像名称为:nikon-d810-high-resolution-image-samples

上传新图像后,名称将不同,例如:image-sample

因此您需要使用新名称更新该图像Url:https://photographylife.com/image-sample

试试这个,我告诉你因为我做同样的希望这会帮助你!


0
投票

所以我们来逐一讨论:

我应该在每次用户更改个人资料图片时更改个人资料图片网址吗

不,您可能会想到其他方法。在我的情况下,我每次使用用户的特定名称更改网址时下载图片(因为我们正在考虑个人资料图片)。因此,当我用Picasso加载图像时,我传递了文件路径而不是URL,因此每次都不会从URL中获取。毕加索实际上并没有这样做。它维护一个缓存。如果文件不存在,只需放置一个占位符。

当用户更改他/她的个人资料图片时,我使用此代码使Picasso无效以加载新图片:

我的代码中没有看到任何无效代码。我会参考这个link来看看它们是如何解决缓存问题的。

我首先将图片网址加载到imageView而不调用networkPolicy方法。

因此,如果您从外部存储器中获取图像,我认为没有必要这样做。

另一个建议是在这些情况下使用Glide。这几乎和毕加索一样,但我个人喜欢用Glide代替毕加索。

希望有所帮助。


0
投票

使用Glide代替Picasso因为谷歌http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en推荐的Glide

防止Glide中的缓存

Glide.with(DemoActivity.this)
    .load(Uri.parse("file://" + imagePath))
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true)
    .into(mImage);

0
投票

将此类添加到com.squareup.picasso包中。

package com.squareup.picasso;

public class PicassoTools {

    public static void clearCache (Picasso p) {
        p.cache.clear();
    }
}

由于缓存具有包可见性,因此该util类可以为您清除缓存。你只需要调用它:

PicassoTools.clearCache(Picasso.with(context));

0
投票

我发现问题所在:我拒绝了磁盘缓存而不是内存缓存。我应该使用这段代码:

picassoInstance.load(url)
.networkPolicy(NetworkPolicy.NO_CACHE)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.transform(new CircleTransform())
.placeholder(dr)
.into(imageView);

我使用此链接:picasso-influencing-image-caching

谢谢大家


0
投票

在加载之前,您需要使文件无效使用下面给出的代码:

Picasso.with(getActivity()).invalidate(file);

要了解更多详细信息,请从他们的网站上学习Picasso文档。

© www.soinside.com 2019 - 2024. All rights reserved.