2017-01-03 38 views
2
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); 
} 

我使用okhttp3來建立一個cookie和session的請求,並且response.body()驗證代碼。 inputStream不爲空,但位圖爲空。我嘗試了下面的方式,但位圖也是空的。如何使用okhttp將驗證碼添加到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); 
} 
+0

您確定響應中的byteArray是圖片嗎? –

+0

是的。我已經使用Glide來嘗試網址,它可以顯示在imageView –

回答

0

我建議使用Picasso直接在您的ImageView下載圖像。從畢加索主頁

庫:

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); 

認沽誤差圖像,如果下載失敗:

Picasso.with(context).load(imgUrl).error(R.drawable.error_image).into(imageView); 

完整代碼與Cookie:

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); 
+0

如果我想使用cookie,我應該如何設置它? –

+0

當然可能。看看[這篇文章](http://stackoverflow.com/a/25346917/3926506) – Sergey

+0

好吧,我會盡量使用它,謝謝 –