Как скачать изображения и хранить в 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://".