[英]Load image from URL - Java
我正在嘗試從發出GET請求的ASYNC任務的handelResponse
中的URL加載圖像,並且在handelResponse
我有這個
InputStream is = (InputStream) new URL(homeScreenPicUrl).getContent();
b = BitmapFactory.decodeStream(is);
但是我的ASYNC任務似乎與此有問題,因為我得到W/System.err﹕ android.os.NetworkOnMainThreadException
我該如何將圖像加載到hadelResponse
,理想情況下我想同步加載它,因為我想等待它請先加載,然后再轉到下一個屏幕。
而且由於這都是在初始屏幕上發生的,所以我只是在等待圖片,然后再轉到主頁。
謝謝
這是因為InputStream
只是一個處理程序:當您從中read()
( BitmapFactory
所做的事情)時,實際上是從網絡中獲取數據,而Android則禁止這樣做,因為這會降低系統速度。
您要么在后台線程中解碼流,然后將AsyncTask
的返回類型更改為Bitmap
,要么將流的內容存儲在byte[]
然后使用該byte[]
在UI線程中構建圖像。 這兩種解決方案是等效的,因為您正在后台線程中使用流並將其內容存儲在內存中。
public byte[] consume(InputStream in) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int read = -1;
while ((read = in.read(buffer)) > 0) {
out.write(buffer, 0, read);
}
return out.toByteArray();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.