Как скачать изображения и хранить в SDCard в Android?

Я подготовил код для загрузки изображений с сервера и хранения в SDCard. Для этого я подготовил код,

 URL url;
 try {
     url = new URL("http://myserver_path/applikaza/appstore/apks/ScrResoluton/scrresolution.jpg");
     input = url.openStream();
     String storagePath = Environment.getExternalStorageDirectory().toString();
     String basepath = storagePath + "/Guayama/" + folderName;
     output = new FileOutputStream(basepath + "/home.png");
     byte[] buffer = new byte[5000];

     int bytesRead = 0;
     while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
         output.write(buffer, 0, bytesRead);
     }

 } catch (MalformedURLException e) { // TODO Auto-generated catch block
     e.printStackTrace();
 } finally {
     output.close();
     input.close();
 }   

но получил NullPointerException в output.close()Я думаю, что сделал ошибку, где-то. Пожалуйста, помогите мне.

1 ответ

Решение

Причина, по которой вы получаете NullPointerException в output.close(), заключается в том, что ваш URL сформирован неправильно. Для начала, он не содержит действительный протокол. Это вызовет исключение MalformedURLException

url = new URL("E:/Suresh/images/home.png");

и вы сразу перейдете к блоку catch, а затем к блоку finally, который вызывает output.close(), но с момента строки вывод равен null

output = new FileOutputStream(basepath + "/home.png");

никогда не был казнен.

Вам нужно исправить свой URL (см. Описание здесь), и вам нужно исправить обработку исключений, как в случае MalformedURLException, это будет происходить только тогда, когда вы устанавливаете значение url, и поэтому у вас никогда не будет -null значение для вывода или ввода, когда выполняется ваш блок finally.

Ваш URL должен, вероятно, иметь форму "http: //something/Suresh/images/home.png" или, возможно, "file: //something/Suresh/images/home.png". Если файл home.png находится на другом компьютере с устройством Android, попробуйте получить к нему доступ через веб-браузер и использовать URL-адрес, отображаемый веб-браузером, в сочетании с "http://".

Другие вопросы по тегам