这个是项目中遇到的一点问题,本来只需要加载图片即可,没想到我们后台顺带将其他的参数放在header里面返回,是不是感觉有些小坑,为了拿到参数,于是报着试探的心态搜搜有没有人遇到类似的问题,在Picasso 的issue找到类似的,但api是很早之前的,已经过时,本文就当笔记记录下,如果恰巧帮助你解决了问题,可以随手点个赞,直接上代码:
OkHttpClient picassoClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
Logger.i(String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();
Logger.i(String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
Logger.i("status code:" + response.code());
return response;
}
})
.build();
Picasso picasso = new Picasso.Builder(getActivity())
.downloader(new OkHttp3Downloader(picassoClient))
.build();
picasso.load(url)
.skipMemoryCache()
.into(mImage);
之前我习惯了简单的写法
Picasso.with(context).load(url).into(mImage);
Picasso可以自定义downloader,Picasso内部已经定义了OkHttpDownloader,但这个不支持最新的OkHttp版本,想想不能因为这个降低OkHttp的版本,就google了下 JakeWharton大神早就预知了这个https://github.com/JakeWharton/picasso2-okhttp3-downloader,放上去就刚好完美,利用OkHttp的拦截器,可以拿到拿到request和response的全部信息了,如果读过okhttp的朋友可能眼熟上面的代码,对,就是日志拦截器。