“Picasso 带 Cookies 加载图片”的版本间差异
跳到导航
跳到搜索
(创建页面,内容为“Category:Android 2019-04-15 11:50 == 用途 == 在加载验证码的时候,如果 Picasso 直接请求图片而不加上 Cookies,可能导致 API 返…”) |
|||
第4行: | 第4行: | ||
== 用途 == | == 用途 == | ||
在加载验证码的时候,如果 Picasso 直接请求图片而不加上 Cookies,可能导致 API 返回验证码错误的问题。<br> | 在加载验证码的时候,如果 Picasso 直接请求图片而不加上 Cookies,可能导致 API 返回验证码错误的问题。<br> | ||
== 版本 == | |||
<pre> | |||
compile 'com.squareup.picasso:picasso:2.5.2' | |||
</pre> | |||
== 解决方法 == | == 解决方法 == |
2019年9月26日 (四) 06:36的最新版本
2019-04-15 11:50
用途
在加载验证码的时候,如果 Picasso 直接请求图片而不加上 Cookies,可能导致 API 返回验证码错误的问题。
版本
compile 'com.squareup.picasso:picasso:2.5.2'
解决方法
设置一个 CookieImageDownloader。
public class CookieImageDownloader extends UrlConnectionDownloader { public CookieImageDownloader(Context context) { super(context); } @Override protected HttpURLConnection openConnection(Uri path) throws IOException { HttpURLConnection conn = super.openConnection(path); conn.setRequestProperty("Cookie", BaseApplication.getCookies()); return conn; } }
在 openConnection(Uri path) 中的 BaseApplication.getCookies() 是一个字符串,样式为:
key=value; key=value; key=value
因为每人所用的网络框架都不同,因此这里只举出我所使用的 OkGo 3 的例子:
StringBuilder cookieBuilder = new StringBuilder(); for (int i = 0; i < cookieStore.getAllCookie().size(); i++) { cookieBuilder.append(cookieStore.getAllCookie().get(i).name()); cookieBuilder.append("="); cookieBuilder.append(cookieStore.getAllCookie().get(i).value()); if (i < cookieStore.getAllCookie().size() - 1) { cookieBuilder.append(";"); } } BaseApplication.cookies = cookieBuilder.toString();
最后在需要加载图片的地方:
Picasso picasso = new Picasso.Builder(activity).downloader(new CookieImageDownloader(activity)).build(); picasso.load(NetRequest.getCodeImg) .fit() .networkPolicy(NetworkPolicy.NO_STORE, NetworkPolicy.NO_CACHE) .memoryPolicy(MemoryPolicy.NO_STORE, MemoryPolicy.NO_CACHE) .centerCrop() .config(Bitmap.Config.RGB_565) .into(activity.binding.ivCode);
大功告成。