2016-08-17 4 views
1

Я хочу загрузить изображение с данного URL. загруженное изображение должно сохраняться на SD-карте. Я использовал приведенный ниже код.скачать и сохранить изображение с url

 URL newurl = null; 
        try { 
         newurl = new URL(strHitRes); 
        } catch (MalformedURLException e) { 
         e.printStackTrace(); 
        } 
        try { 
         HttpURLConnection connection = (HttpURLConnection) newurl.openConnection(); 
         connection.setDoInput(true); 
         connection.connect(); 
         InputStream input = connection.getInputStream(); 
         Bitmap myBitmap = BitmapFactory.decodeStream(input); 
         String root = Environment.getExternalStorageDirectory().toString(); 
         File myDir = new File(root + "/saved_images"); 
         myDir.mkdirs(); 
         Random generator = new Random(); 
         int n = 10000; 
         n = generator.nextInt(n); 
         String fname = "Image-"+ n +".jpg"; 
         File file = new File (myDir, fname); 
         if (file.exists()) file.delete(); 
         try { 
          FileOutputStream out = new FileOutputStream(file); 
          myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
          Toast.makeText(getApplicationContext(),"download successful",Toast.LENGTH_LONG).show(); 
          out.flush(); 
          out.close(); 

         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

Но изображение не загружается. Даже я тестировал в режиме отладки, я обнаружил, что мой битмап равен нулю. Как это решить.

+0

Вы добавили необходимые разрешения в файле манифеста? – Jas

+0

Обычно он работает на моем устройстве. Так что сначала проверьте, добавлены ли вы INTERNET и WRITE_EXTERNAL_STORAGE или нет. Во-вторых, проверьте правильность выбранного URL-адреса. – anhtuannd

+0

Я добавил все необходимые разрешения –

ответ

0

// Чтобы скачать растровое изображение из URL

public Bitmap getbmpfromURL(String surl){ 
     try { 
      URL url = new URL(surl); 
      HttpURLConnection urlcon = (HttpURLConnection) url.openConnection(); 
      urlcon.setDoInput(true); 
      urlcon.connect(); 
      InputStream in = urlcon.getInputStream(); 
      Bitmap mIcon = BitmapFactory.decodeStream(in); 
      return mIcon; 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
      return null; 
     } 
    } 

Чтобы сохранить растровое изображение на карту памяти

private void SaveImage(Bitmap finalBitmap) { 

    String root = Environment.getExternalStorageDirectory().toString(); 
    File myDir = new File(root + "/saved_images");  
    myDir.mkdirs(); 
    Random generator = new Random(); 

    String fname = "Image.jpg"; 
    File file = new File (myDir, fname); 
    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

И не забудьте использовать ниже разрешения в вашем Manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
+0

Извините, но это НЕ способ загрузить файлы на устройство. Почему он обозначен как правильный ответ? Возьмите другую. – greenapps

+0

#greenapps, если у вас есть альтернативы, вы можете публиковать сообщения. он работает для меня. – AshisParajuli

+0

'Возьми другой. Я сказал. Я уже сказал вам альтернативу. Лучше. Вы могли бы прочитать его. Другой ответ - лучший, поскольку он не использует Bitmap и BitmapFactory. Ответ @Prakash U. – greenapps

1

сказать спасибо Vineet за его answer

try { 
    URL url = new URL("url from apk file is to be downloaded"); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setRequestMethod("GET"); 
    urlConnection.setDoOutput(true); 
    urlConnection.connect(); 

    File sdcard = Environment.getExternalStorageDirectory(); 
    File file = new File(sdcard, "filename.ext"); 

    FileOutputStream fileOutput = new FileOutputStream(file); 
    InputStream inputStream = urlConnection.getInputStream(); 

    byte[] buffer = new byte[1024]; 
    int bufferLength = 0; 

    while ((bufferLength = inputStream.read(buffer)) > 0) { 
     fileOutput.write(buffer, 0, bufferLength); 
    } 
    fileOutput.close(); 

} catch (MalformedURLException e) { 
     e.printStackTrace(); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
} 
+0

Да, это способ сделать это. Не используйте Bitmap и BitmapFactory для загрузки изображений. Изображение будет иметь высокое разрешение. Настолько высоко, что растровое изображение не может быть сделано, а BitmapFactory возвращается null. – greenapps

+0

'urlConnection.setDoOutput (true);'. Выход не выполнен. – greenapps

+0

спасибо чувак за ответ, он отлично работает. Я хочу, чтобы код был разделен, как опубликовал Ашис Параджули. –

Смежные вопросы