首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 子線程中 BitmapFactory.decodeStream 返回 null 的解決

     編輯:程式設計疑難解答

現象

子線程下載圖片,InputStream in = conn.getInputStream() 直接傳給 BitmapFactory.decodeStream(in) 返回 null;不放在 run() 中則正常。

原因分析

HttpURLConnection.getInputStream() 返回的流只能讀取一次,且必須在網絡線程中完整讀取。若在其他線程或多次讀取,流已關閉或位置錯誤。

解決方案

  1. 先讀取字節數組,再解碼:
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    while ((len = in.read(buffer)) != -1) baos.write(buffer, 0, len);
    byte[] data = baos.toByteArray();
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
    
  2. 使用成熟圖片庫:Glide/Picasso/Coil 自動處理線程、緩存、生命周期,強烈建議替換手寫下載代碼。

參考文章

Android BitmapFactory.decodeStream 返回 null 解決方案

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved