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

时间:2016-02-29 07:29:18

标签: android picasso

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

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

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

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

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

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

6 个答案:

答案 0 :(得分:1)

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

<强> EG。当前网址: https://photographylife.com/nikon-d810-high-resolution-image-samples

图片名称为: nikon-d810-high-resolution-image-samples

在上传新图片后,名称会有所不同例如image-sample

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

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

答案 1 :(得分:0)

让我们逐一讨论:

  

每次用户更改个人资料时,我都应该更改个人资料图片网址吗?   图像?

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

  

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

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

  

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

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

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

希望有所帮助。

答案 2 :(得分:0)

使用Glide而不是Picasso,因为谷歌建议使用Glide http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

防止Glide中的缓存

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

答案 3 :(得分: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));

答案 4 :(得分:0)

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

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

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

谢谢大家

答案 5 :(得分:0)

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

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

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