title: Download images with AsyncTask
body: <p>I'm not really sure what goes wrong with my code or structure. I wanted to use AsyncTask to download images and display out the progress bar at the mean time. But I tried out a few different way of doing it. It still failed and no idea what's wrong with it. My structure flow is</p>
  
  <p><strong>ContentID is a string array that stores the content ID of the Images.</strong></p>
  
  <p><strong>Primary Issue: It managed to download images from the url and store into the phone, but the downloaded images are all the same image. It should be different images, it's not what I expected.</strong></p>
  
  <p><em>Secondary Issue: The progress bar pop up while the application downloading images, but the progress bar did not update it's progress. It just remains 0% and dismissed after the download completed.</em></p>
  
  <p>I wanted to know what causes primary and secodary issue as i mentioned. Please leave a comment or answer if you might know what's wrong with my code. Any help will be appreciated. </p>
  
  <pre><code>if(isSyncSuccess){
  
       SetConstant.IMAGE_EXIST = 1;
       pDialog = new ProgressDialog(GalleryScreen.this);
       pDialog.setMessage("Downloading file. Please wait...");
       pDialog.setIndeterminate(false);
       pDialog.setProgress(0);
       pDialog.setMax(contentId.length);
       pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       pDialog.setCancelable(true);
  
  
       if (contentId.length&gt;0){
       Log.i(TAG, "contentid.length:" +contentId.length);
           for (int i=0;i&lt;contentId.length;i++){
               if(helper.databaseChecking(useremail, contentId[i])){
                   contentdownload = i;
                   SetConstant.CONTENT_ID = contentId[i]; 
  
                   String URL = SetConstant.URL_DOWNLOAD_CONTENT+contentId[i];
  
                   DownloadFile downloadFile = new DownloadFile();
                   downloadFile.execute(URL);
  
  
                   }
  
  
  
      private class DownloadFile extends AsyncTask&lt;String, Integer, String&gt;{
      @Override
      protected String doInBackground(String... sUrl){
                  Bitmap bm;
                  InputStream in;
  
          try{
  
              in = new java.net.URL(sUrl[0]).openStream();
              bm = BitmapFactory.decodeStream(new PatchInputStream(in));
              File storage = new File(Environment.getExternalStorageDirectory() + File.separator + "/Image/");
              Log.i(TAG,"storage:" +storage);
              Log.i(TAG,"storage:" +storage.getAbsolutePath());
              if(!storage.exists()){
                  storage.mkdirs();
  
              }
                  String FileName = "/"+SetConstant.CONTENT_ID+".jpg"; 
                  FileOutputStream fos = new FileOutputStream(storage + FileName);
                  bm.compress(Bitmap.CompressFormat.JPEG, 85, fos);
  
                  String filepath = storage + FileName;
                  File filecheck = new File (filepath);
                  long fileSize = filecheck.length();
                  fos.flush();
                  fos.close();
  
                  Log.i(TAG, "bm:" +bm);
                  Log.i(TAG, "fos:" +fos);
                  Log.i(TAG, "filesize:" +fileSize);
                  Log.i(TAG, "filepath:" +filepath);
  
  
          }
          catch(IOException e1){
                  e1.printStackTrace();
                  }   
  
          return null;
      }
  
      @Override
      protected void onPreExecute(){
          super.onPreExecute();
          pDialog.show();
      }
  
      @Override
      protected void onProgressUpdate(Integer... progress){
          super.onProgressUpdate(progress);
          pDialog.setProgress(progress[0]);
      }
  
      protected void onPostExecute(String result){
          super.onPostExecute(result);
          pDialog.dismiss();
      }
  }
  </code></pre>
  
  <p><strong>Edit</strong></p>
  
  <p>Now the application able to download images according and the progress bar is working as well! But I got another issue is how to return error message when the application failed to complete the download. Currently when the application failed to download it will crash. I believed that I should not run it inside the doInBackground side. But where else can I do the checking? Any idea how to return as an error message and request for the user to retry instead of crashing the application? </p>