2016-02-29 36 views
0

我有一個Android應用程序,它有個人資料圖片。 用戶可以編輯他/她的個人資料圖像。 我正在使用畢加索加載圖像,但每次加載配置文件圖像時,畢加索都會加載舊圖像。個人資料圖片上傳和加載Picasso

當我上傳個人資料圖片時,我不會更改它的網址,因此每個用戶的個人資料圖片url都是不變的。

第一個問題:我應該每次更改個人資料圖像時更改個人資料圖片url嗎?

第二個問題:當用戶改變他/她的個人資料圖片我無效畢加索使用此代碼加載新的形象:

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

但畢加索告訴我舊的。 還有一件事: 我首先將圖像url加載到imageView中,而無需調用networkPolicy方法。 我應該如何處理這個問題?

回答

0

所以讓我們只討論一個接一個:

我應該改變檔案圖片網址,每次用戶的變化曲線 形象?

不,您可能會想到其他方法。在我的情況下,每次URL更改時都會下載該圖片,並顯示用戶的特定名稱(因爲我們正在考慮個人資料圖片)。所以當我用Picasso加載圖像時,我傳遞了文件路徑而不是URL,因此每次都不會從URL中獲取。畢加索實際上並沒有這樣做。它維護一個緩存。如果該文件不存在,只需放置一個佔位符。

當用戶改變他/她的個人資料圖片我無效畢加索使用此代碼加載 新形象:

我沒有在這裏看到您的代碼中任何無效代碼。我會參考這個link來看看他們是如何解決緩存問題的。

我將image url加載到imageView中,而不用先調用networkPolicy方法 。

所以,如果你從外部存儲器中獲取圖像,我認爲沒有必要這樣做。

另一個建議是在這些情況下使用Glide。這與畢加索幾乎一樣,但我個人喜歡用Glide而不是畢加索。

希望有所幫助。

1

每張圖片都有不同的名字,每當新的圖像上傳您必須更新您的圖片網址

例如,當前網址:https://photographylife.com/nikon-d810-high-resolution-image-samples

,其中圖片的名稱是:nikon-d810-high-resolution-image-samples

後上傳新的圖片,名稱將是不同例如image-sample

所以你需要更新該圖片的網址:https://photographylife.com/image-sample用新名稱

試試這個,我告訴你導致即時通訊做同樣的希望,這將幫助你!

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

我使用的是畢加索2.5.2和我無法找到緩存領域 – Hojjat

0

我發現這裏的問題是: 我推掉了磁盤緩存而不是內存緩存。我應該使用此代碼:

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

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

謝謝大家

相關問題