2016-03-04 80 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