Android 如何使用okhttp将验证代码放入imageView?
我使用okhttp3构建一个带有cookie和会话的请求,response.body()是验证代码。inputStream不为空,但位图为空。我尝试了下面的方法,但是位图也是空的Android 如何使用okhttp将验证代码放入imageView?,android,bitmap,imageview,inputstream,okhttp3,Android,Bitmap,Imageview,Inputstream,Okhttp3,我使用okhttp3构建一个带有cookie和会话的请求,response.body()是验证代码。inputStream不为空,但位图为空。我尝试了下面的方法,但是位图也是空的 Request request = new Request.Builder() .url(url) .addHeader("Cookie", "JSESSIONID="+sessionId) Response response = client
Request request = new Request.Builder()
.url(url)
.addHeader("Cookie", "JSESSIONID="+sessionId)
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
InputStream inputStream = response.body().byteStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
}
我建议使用直接在ImageView中下载图像
毕加索图书馆主页上的示例:
private Bitmap convertBitmap(final Response response) throws IOException {
InputStream inputStream = response.body().byteStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
byte[] bmp_buffer;
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inputStream.close();
bmp_buffer = outStream.toByteArray();
return BitmapFactory.decodeByteArray(bmp_buffer, 0, bmp_buffer.length);
}
此外,您还可以在下载图像时放置占位符:
String imgUrl = "http://i.imgur.com/DvpvklR.png";
Picasso.with(context).load(imgUrl).into(imageView);
放置错误图像,如果下载失败:
Picasso.with(context).load(imgUrl).placeholder(R.drawable.placeholder).into(imageView);
包含cookie的完整代码:
Picasso.with(context).load(imgUrl).error(R.drawable.error_image).into(imageView);
您确定响应中的byteArray是图像吗?是的。我已经使用Glide尝试了url,它可以在ImageView中显示。如果我想使用cookie,我应该如何设置它?当然可能。您好,我试着给毕加索添加曲奇,但我还是无法得到图像,为什么?client=new-OkHttpClient.Builder().addInterceptor(new-Interceptor(){public Response intercept(Chain-Chain)抛出IOException{Request-Request=Chain.Request().newBuilder().addHeader(“Cookie”,“JSESSIONID=abc3St68rRb0V7U5UqLLv;Cookie_-test=1”).build();return-Chain.proced(Request);}.build();毕加索-毕加索=新的Picasso.Builder(MainActivity.this).downloader(新的OkHttp3Downloader(客户端)).build();加载(url).into(imageView);你有stacktrace吗?
IOException
通常是关于连接问题的。你能检查一下吗?
OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder request = chain.request().newBuilder();
request.addHeader("Cookie", "JSESSIONID="+sessionId);
return chain.proceed(request.build());
}
});
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
client.setCookieHandler(cookieManager);
// Create the downloader for Picasso to use
OkHttpDownloader downloader = new OkHttpDownloader(client);
Picasso picasso = new Picasso.Builder(context).downloader(downloader).build();
picasso.load(imgUrl).placeholder(R.drawable.placeholder).error(R.drawable.error_image).into(imageView);