在日常开发中,加载网络图片是一个常见的需求,而网上也有很多加载图片的框架,Picasso是目前比较流行的一款加载图片框架,它最简单的使用方法如下。
picasso.load(url).into(imageView);
但是这个请求url提交的请求与之前的请求就不在同一个会话上 ,如果我们需要让请求保持在同一个会话上,我们应该先定义个拦截器。该拦截器返回一个带Response,这个对象的请求头已经设置好我们想要的cookie了。
package com.zhang.oa.Interceptor;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class RequestInterceptor implements Interceptor {
String cookie = null;
public RequestInterceptor(String cookie) {
this.cookie = cookie;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder request = chain.request().newBuilder();
request.addHeader("Cookie", cookie);
return chain.proceed(request.build());
}
}
接着在onCreate中编写代码实现网络图片的加载。
//加载网络图片
final OkHttpClient okHttpClient = new OkHttpClient();
//设置请求头,在同一个session
okHttpClient.interceptors().add(new RequestInterceptor(getSharedPreferences("identify", Context.MODE_PRIVATE).getString("sessionId",null)));
Picasso picasso = new Picasso.Builder(YZSQFJXQActivity.this).downloader(new OkHttpDownloader(okHttpClient)).build();
picasso.load(url).into(imageView);
其中url为我们后端开发好的请求接口,imageView为前端的ImageView对象。
有些时候,我们需要通过框架来获取图片的位图(Bitmap)进而可以进行文件的本地保存,Picasso框架也提供了这一功能,代码如下。
final OkHttpClient okHttpClient = new OkHttpClient();
//设置请求头,在同一个session
okHttpClient.interceptors().add(new RequestInterceptor(getSharedPreferences("identify", Context.MODE_PRIVATE).getString("sessionId",null)));
final Picasso picasso = new Picasso.Builder(YZSQFJXQActivity.this).downloader(new OkHttpDownloader(okHttpClient)).build();
new Thread(new Runnable() {
@Override
public void run() {
try{
//获取网络图片的位图
imageBitmap = picasso.load(url).get();
handler.sendEmptyMessage(0);
}
catch (Exception e){e.printStackTrace();}
}
}).start();
这样就可以获取网络资源的位图了,获取位图后可以调用ImageView中的setImageBitmap进行图片的设置。
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int tag = msg.what;
switch (tag) {
//获取数据
case 0:
//设置位图
imageView.setImageBitmap(imageBitmap);
break;
}
}
};
有了Bitmap后还可以进行图片的本地保存等功能。