簡體   English   中英

從URL加載圖像-Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM