2012-02-04 76 views
3

在我的應用程序,我們必須從服務器下載約10張圖片,並顯示在手機上。我怎樣才能做到這一點?我可以使用相同的HttpConnection完整下載嗎?有什麼其他的下載方式?下載圖片在循環Java我

+0

在StackOverflow需要接受一個答案,如果它已經幫助你。爲了做到這一點,看到答案左側的綠色勾號。 – frayab 2012-02-07 08:13:51

回答

1

你可以用這個簡單的循環做(假設是圖像列表與圖像的URL列表)。

HttpConnection = null; 
Image image = null; 
for (int i = 0; i < imageList.getSize(); i++) { 
    try{ 
     String urlImage = imageList.get(i); 
     hc = (HttpConnection) Connector.open(urlImage); 
     image = Image.createImage(hc.openInputStream())); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      hc.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

圖像下載循環現在我們正在使用TimerTask進行下載,是否安全,或者我們必須使用Thread來代替。使用Timer我們可以輕鬆取消任務,這就是我們使用它的原因。 – 2012-02-07 05:51:56

+0

你可以使用一個簡單的線程,但是如果你想要更多的控制像取消任務那麼最好使用一個時間任務 – frayab 2012-02-07 08:11:41

0

您可以嘗試下面的方法在循環中從服務器下載圖像。

private void downloadImage (String URL) 
{ 
    try 
     { 
      System.out.println("URL FOR POST_DATA : "+URL); 
      // Open up a http connection with the Web server for both send and receive operations 
      httpConnection = (HttpConnection)Connector.open(URL, Connector.READ_WRITE); 
      // Set the request method to POST 
      httpConnection.setRequestMethod(HttpConnection.POST); 
      // Set the request headers 
      httpConnection.setRequestProperty(ConstantCodes.ACTION_MODE_PARAMETER,action); 
      httpConnection.setRequestProperty(ConstantCodes.USER_NAME_REQUEST_PARAMETER,userName); 
      if(eventName==null || eventName.equals("")) 
       eventName="default"; 
      httpConnection.setRequestProperty(ConstantCodes.EVENT_NAME_REQUEST_PARAMETER, eventName); 
      httpConnection.setRequestProperty(ConstantCodes.CAMERAID_REQUEST_PARAMETER, cameraID); 
      // all the headers are sending now and connection chanel is establising 
      dis = httpConnection.openDataInputStream(); 

      int ch = 0; 
      ByteArrayOutputStream bytearray = new ByteArrayOutputStream(250000); 

      while((ch = dis.read()) != -1) 
       bytearray.write(ch); 

      // fileByte contains whole file in bytes 
      byte fileByte[] = bytearray.toByteArray(); 
      fileSize = fileByte.length; 
      System.out.println("Got file size : "+fileSize); 
      if(bytearray!=null) bytearray.close(); 
      midlet.getLastPostedImageResponse(fileByte); 
     } 
     catch (IOException ioe) 
     { 
      ioe.printStackTrace(); 
      System.out.println("IOException occured during getting last image data : "+ioe.getMessage()); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      System.out.println("Eeception occurred during getting last image data : "+e.getMessage()); 
     } 
     finally 
     { 
      System.out.println("Calling close from Last image posted Action"); 
      close(); 
     } 
+1

爲什麼發佈?你的代碼對於簡單的圖片下載來說太複雜了 – frayab 2012-02-05 18:42:24

+0

可以請你分享簡單的方法 – 2012-02-06 03:35:33

+0

這是最簡單的方法,我認爲只需製作一個HttpConnection並通過它讀取文件即可。 – Lucifer 2012-02-06 03:39:15