title: android saving image twice to SD-card
body: <p>I have a code that downloads an image from a website and saves it on the SD-card. 
  When I send 2 web addresses for some reason, it only downloads the first image 2 times and saves them both with the second image name so if there is image1 and image2 on the website the code will only download image1 two times and save it on SD-card as image2 can please someone tell me what am I doing wrong? </p>
  
  <pre><code>public String getLocalLink(String image_URL, String imageName){
          /** This is what we do with this method:
           * Go online, according to the link, get the content, call the method to save.
           */
  
          ImageLink = image_URL;
          URL ImageLinkURL;
  
          try {
               ImageLinkURL = new URL(ImageLink);
              //URL url     = new URL(strURL);
              if (!hasExternalStoragePublicPicture(imageName)) {
                  isImage = false;
                  new DownloadImageTask().execute(ImageLinkURL);
                  Log.v("log_tag", "if");
                  isImage = true;
                  File sdImageMainDirectory = new File(Environment
                          .getExternalStorageDirectory(), getResources()
                          .getString(R.string.directory));
                  sdImageMainDirectory.mkdirs();
                  File file = new File(sdImageMainDirectory, imageName);
                  Log.v("log_tag", "Directory created");
              }
  
          } catch (MalformedURLException e) {
              Log.v(TAG, e.toString());
          }
          return ("/sdcard/Hanud/”+imageName+".jpg");
  
      }
  
  
      private class DownloadImageTask extends AsyncTask&lt;URL, Integer, Bitmap&gt; {
          // This class definition states that DownloadImageTask will take String
          // parameters, publish Integer progress updates, and return a Bitmap
          protected Bitmap doInBackground(URL... paths) {
              URL url;
              try {
                  url = paths[0];
                  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 &lt; length) {
                      if (length &lt; buffersize) {
                          read = is.read(imageData, downloaded, length);
                      } else if ((length - downloaded) &lt;= buffersize) {
                          read = is.read(imageData, downloaded, length
                                  - downloaded);
                      } else {
                          read = is.read(imageData, downloaded, buffersize);
                      }
                      downloaded += read;
                      publishProgress((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 = ImageLink.substring(ImageLink
                      .lastIndexOf("/") + 1);
              if (result != null) {
                  hasExternalStoragePublicPicture(name);
                  saveToSDCard(result, name);
                  isImage = true;
  
              } else {
                  isImage = false;
  
              }
          }
      }
  
      public void saveToSDCard(Bitmap bitmap, String name) {
          boolean mExternalStorageAvailable = false;
          boolean mExternalStorageWriteable = false;
          String state = Environment.getExternalStorageState();
          if (Environment.MEDIA_MOUNTED.equals(state)) {
              mExternalStorageAvailable = mExternalStorageWriteable = true;
              Log.v(TAG, "SD Card is available for read and write "
                      + mExternalStorageAvailable + mExternalStorageWriteable);
              saveFile(bitmap, name);
          } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
              mExternalStorageAvailable = true;
              mExternalStorageWriteable = false;
              Log.v(TAG, "SD Card is available for read "
                      + mExternalStorageAvailable);
          } else {
              mExternalStorageAvailable = mExternalStorageWriteable = false;
              Log.v(TAG, "Please insert a SD Card to save your image "
                      + mExternalStorageAvailable + mExternalStorageWriteable);
          }
      }
  
      private void saveFile(Bitmap bitmap, String name) {
  
          String filename = name;
          ContentValues values = new ContentValues();
          File sdImageMainDirectory = new File(Environment
                  .getExternalStorageDirectory(), getResources().getString(
                  R.string.directory));
          sdImageMainDirectory.mkdirs();
          File outputFile = new File(sdImageMainDirectory, filename);
          values.put(MediaStore.MediaColumns.DATA, outputFile.toString());
          values.put(MediaStore.MediaColumns.TITLE, filename);
          values.put(MediaStore.MediaColumns.DATE_ADDED, System
                  .currentTimeMillis());
          values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
          Uri uri = this.getContentResolver().insert(
                  android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
  
                  values);
          try {
              OutputStream outStream = this.getContentResolver()
                      .openOutputStream(uri);
              bitmap.compress(Bitmap.CompressFormat.PNG, 95, outStream);
  
              outStream.flush();
              outStream.close();
  
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  
      private boolean hasExternalStoragePublicPicture(String name) {
          File sdImageMainDirectory = new File(Environment
                  .getExternalStorageDirectory(), getResources().getString(
                  R.string.directory));
          File file = new File(sdImageMainDirectory, name);
          if (file != null) {
              file.delete();
          }
  
          return file.exists();
      }
  </code></pre>