2016-03-04 186 views
2

正在關注this回答,我試圖在使用Picasso的ListView中延遲加載圖像。這是我的代碼:使用Picasso下載(帶攔截器)的設置圖像

public class PicassoInterceptor implements Interceptor { 

private String param1; 
private String param2; 
private String param3; 
private int param4; 
private String param5; 

public PicassoInterceptor(String param1, String param2, String param3, int param4, String param5) { 
    this.param1 = param1; 
    this.param2 = param2; 
    this.param3 = param3; 
    this.param4 = param4; 
    this.param5 = param5; 
} 

@Override 
public Response intercept(Chain chain) throws IOException { 
    final MediaType JSON 
      = MediaType.parse("application/json; charset=utf-8"); 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("param1", param1); 
    map.put("param2", param2); 
    map.put("param3", param3); 
    map.put("param4", String.valueOf(param4)); 
    String requestJsonBody = new Gson().toJson(map); 
    RequestBody body = RequestBody.create(JSON, requestJsonBody); 
    final Request original = chain.request(); 
    final Request.Builder requestBuilder = original.newBuilder() 
      .url(param5) 
      .post(body); 
    return chain.proceed(requestBuilder.build()); 
} 
} 

適配器,getView方法中:

OkHttpClient okHttpClient = new OkHttpClient(); 
    okHttpClient.interceptors().add(new PicassoInterceptor(param1, param2,param3,param4, param5)); 

    OkHttpDownloader downloader = new OkHttpDownloader(okHttpClient); 
    Picasso picasso = new Picasso.Builder(context).downloader(downloader).build(); 

現在,如果我理解正確的話,圖像被下載。但是,如何在圖像視圖中設置它?

編輯:

圖像沿着BASE64接收。

+0

你解決了嗎? –

+0

不是我想要的方式,不得不要求服務器人員將方法從POST更改爲GET,並構建URL。這樣,工作,但沒有設法使其與POST工作。 – Fustigador

回答

0

只需添加into()方法,並通過ImageView的:

Picasso picasso = new Picasso.Builder(context).into(imageView).downloader(downloader).build(); 
+0

這不起作用。無法調用寫入它的方法。 – Fustigador

+0

您需要創建aconstructor,並在該類中傳遞一個imageView PicassoInterceptor –

+0

但是我無法調用放置它的方法......此外,此代碼位於ListView的適配器中,而不是攔截器。 – Fustigador

1

用途:

picasso.load(param5).fit().into(imageView); 

它並不真正的問題,其網址你給load()函數 - 因爲你覆蓋它在攔截器。但我仍然會給出一個合理的 - 以避免問題。

,也可以編輯你的攔截器是這樣的:Picasso load image with HTTP post

+0

和photoUri是...?我沒有URI。 – Fustigador

+0

畢加索是用於加載圖像,所以你必須有你想要加載的圖像。 「load」函數可以獲得File,Uri,URL或資源ID。 你想加載什麼圖片? –

+0

我知道畢加索是什麼。問題是,我需要使用POST請求下載圖像,這就是我使用Interceptor的原因,因爲「默認」用法是使用GET請求。由於URL總是相同的(因爲它的發佈請求),你的方式是行不通的。 – Fustigador