个人资料图片上传器并使用毕加索加载

Posted

技术标签:

【中文标题】个人资料图片上传器并使用毕加索加载【英文标题】:Profile Image Uploader and Load it with Picasso 【发布时间】:2016-06-12 04:01:28 【问题描述】:

我有一个带有个人资料图片的 android 应用。 用户可以编辑他/她的个人资料图像。 我正在使用 Picasso 加载图片,但每次加载个人资料图片时,Picasso 都会加载旧图片。

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

图片名称在哪里: nikon-d810-high-resolution-image-samples

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

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

试试这个,我告诉你因为我也在做同样的事情,希望这会对你有所帮助!

【讨论】:

【参考方案2】:

所以让我们一一讨论:

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

没有。你可能会想其他办法。就我而言,每次 url 随用户的特定名称发生变化时,我都会下载图片(因为我们正在考虑个人资料图片)。因此,当我用毕加索加载图像时,我传递了文件路径而不是 URL,这样它就不会每次都从 URL 中获取。毕加索实际上也没有这样做。它维护一个缓存。如果文件不存在,只需放置一个占位符即可。

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

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

我在没有调用 networkPolicy 方法的情况下将图像 url 加载到 imageView 一开始。

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

另一个建议是在这些情况下使用Glide。这和 Picasso 几乎是一回事,但我个人更喜欢用 Glide 代替 Picasso。

希望对您有所帮助。

【讨论】:

【参考方案3】:

使用 Glide 而不是 Picasso,因为 Glide 是 google 推荐的 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);

【讨论】:

【参考方案4】:

将此类添加到 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));

【讨论】:

我使用的是 picasso 2.5.2,但找不到缓存字段【参考方案5】:

我发现问题出在哪里: 我拒绝了磁盘缓存,但没有拒绝内存缓存。我应该使用这段代码:

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

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

谢谢大家

【讨论】:

【参考方案6】:

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

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

要了解更多详细信息,请访问他们网站上的毕加索文档。

【讨论】:

以上是关于个人资料图片上传器并使用毕加索加载的主要内容,如果未能解决你的问题,请参考以下文章

dz论坛通信成功,上传头像的flash滚动条一直加载,个人空间也不能上传图片到相册,帖子里可以上传图片。

该应用程序崩溃使用毕加索和发送空白图片

使用 Firebase 存储上传 base64 图像

Picasso(毕加索)加载圆形图片圆角图片

Picasso(毕加索)加载圆形图片圆角图片

上传的图片不显示在网页上