2012-08-29 120 views
0

親愛的我用下面的代碼下載android中的圖片, 其中_in是Input Stream和DataInputStream _din。 我使用一個URL來下載圖片,但有時它會返回我的圖片,有時它不會在位圖中顯示null。我在這裏有一個問題,一個是這種好的方式來下載圖片或建議在這張圖片中可能是錯誤的代碼有時會返回圖片,有時它不起作用?在android中下載圖片

if (_in == null) { 
     _in = urlConnection.getInputStream(); 
    } 
    if (_din == null) { 
     _din = new DataInputStream(_in); 
    } 

    byte[] data = new byte[0]; 
    byte[] buffer = new byte[512]; 
    int bytesRead; 
    while ((bytesRead = _din.read(buffer)) > 0) {   
     byte[] newData = new byte[data.length + bytesRead];   
     System.arraycopy(data, 0, newData, 0, data.length);   
     System.arraycopy(buffer, 0, newData, data.length, bytesRead);   
     data = newData; 
    }  
    InputStream is = new ByteArrayInputStream(data); 
    Bitmap bmp = BitmapFactory.decodeStream(is); 

回答

0

試試這個,告訴我你的問題是否仍然存在。

Bitmap ret; 
     HttpURLConnection conn = null;   
     try 
     { 
      URL u = new URL(mUrl); 
      conn = (HttpURLConnection) u.openConnection(); 
      conn.setConnectTimeout(CONNECTION_TIMEOUT); 
      conn.setReadTimeout(CONNECTION_TIMEOUT); 
      conn.setDoInput(true); 
      conn.setRequestMethod("GET"); 

      int httpCode = conn.getResponseCode(); 
      if (httpCode == HttpURLConnection.HTTP_OK || httpCode == HttpURLConnection.HTTP_CREATED) 
      { 
       InputStream is = new BufferedInputStream(conn.getInputStream()); 
       ret = BitmapFactory.decodeStream(is); 
      } 
      else 
      { 
       ret = null; 
      } 
     } 
     catch (Exception ex) 
     { 
      ret = null; 
     } 
     finally 
     { 
      if (conn != null) 
      { 
       conn.disconnect(); 
      } 
     } 
0

你爲什麼使用臨時緩衝區爲你的形象的InputStream?只需直接與BitmapFactory使用的URLConnection的InputStream:

_in = urlConnection.getInputStream(); 
Bitmap bmp = BitmapFactory.decodeStream(_in); 

此,如果你的圖片是確定應始終工作。

+0

嗨好提示。 。我做了它的工作。 。做更多的測試以使其回答。 。 – aftab