2013-02-25 65 views
1

从doInBackground中的数组列表中读取图像url使用for循环,但循环不增加只有第1个url正在加载和保存图像。这里是代码:for循环不会在异步任务中的Doinbackground中增加

class DownloadImageTask extends AsyncTask<Void, Void, Bitmap> { 
    // This class definition states that DownloadImageTask will take String 
    // parameters, publish Integer progress updates, and return a Bitmap 
    @SuppressWarnings("unused") 
    protected Bitmap doInBackground(Void... paths) { 
     //URL url; 
     try { 
       for(int j=0; j<List.size();j++) 
      { 
        reviewImageLink =List.get(j).get(TAG_Image); 
        URL  url = new URL(reviewImageLink); 
        // URL reviewImageURL; 
        String name = reviewImageLink.substring(reviewImageLink .lastIndexOf("/") + 1,reviewImageLink.length()); 
         //try { 

          if (!hasExternalStoragePublicPicture(name)) { 
           isImage = false; 
           //new DownloadImageTask().execute(); 
           Log.v("log_tag", "if"); 
           isImage = true; 
           File sdImageMainDirectory = new File(Environment.getExternalStorageDirectory(), getResources().getString(R.string.directory)); 
          //if(!sdImageMainDirectory.exists()){ 
           sdImageMainDirectory.mkdirs(); 
           File file = new File(sdImageMainDirectory, name); 
           Log.v("log_tag", "Directory created");} 
        //} 
        // catch (MalformedURLException e) { 
         // Log.v(TAG, e.toString()); } 
       // } 

      // }//try 
      // catch (Exception e) { 
       //  e.printStackTrace();} 
      //url = new URL(List.get(j).get(TAG_Image)); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      int length = connection.getContentLength(); 
      InputStream is = (InputStream) url.getContent(); 
      byte[] imageData = new byte[length]; 
      int buffersize = (int) Math.ceil(length/(double) 100); 
      int downloaded = 0; 
      int read; 
      while (downloaded < length) { 
       if (length < buffersize) { 
        read = is.read(imageData, downloaded, length); 
       } else if ((length - downloaded) <= buffersize) { 
        read = is.read(imageData, downloaded, length- downloaded); 
       } else { 
        read = is.read(imageData, downloaded, buffersize); 
       } 
       downloaded += read; 
       setProgress((downloaded * 100)/length); 
      } 
      Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0,length); 
      if (bitmap != null) { 
       Log.i(TAG, "Bitmap created"); 
      } else { 
       Log.i(TAG, "Bitmap not created"); 
      } 
      is.close(); 
      return bitmap; 

     } 
     }catch (MalformedURLException e) { 
      Log.e(TAG, "Malformed exception: " + e.toString()); 
     } catch (IOException e) { 
      Log.e(TAG, "IOException: " + e.toString()); 
     } catch (Exception e) { 
      Log.e(TAG, "Exception: " + e.toString()); 
     } 
     return null; 

    } 

    protected void onPostExecute(Bitmap result) { 
     String name = reviewImageLink.substring(reviewImageLink.lastIndexOf("/") + 1,reviewImageLink.length()); 
     if (result != null) { 
      hasExternalStoragePublicPicture(name); 
      saveToSDCard(result, name); 
      isImage = true; 

     } else { 
      isImage = false; 

     } 
    } 
} 
+0

我认为'返回位图;'打破循环 – 2013-02-25 07:08:07

+0

不知何故,我认为List.size()很奇怪,是不是一个类,而不是一个对象? – Gjordis 2013-02-25 07:10:37

+0

@ρяσѕρєяK是的,当我评论返回位图;语句循环运行良好,但我可以在哪里返回? – 2013-02-25 08:33:04

回答

1

List是一个接口,你可以不喜欢List.size()一个.DEFINE名单亚型如ArrayList或something.There使用是没有错与loop.For例如:

List<Integer> li = new ArrayList<Integer>(); 
li.add(10); 
li.add(20)'; 
for(int i = 0; i <= li.size(); ++i) { 
//your stuff 
}