我准备了从服务器下载图像和存储在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();
}
但在output.close()
得到NullPointerException。我认为在某些地方做错了。请帮助我。
答案 0 :(得分:0)
您在output.close()处获得NullPointerException的原因是您的URL格式不正确。对于初学者,它不包含有效的协议。这将导致在行上抛出MalformedURLException
url = new URL("E:/Suresh/images/home.png");
然后你会直接进入catch块,然后是finally块,它调用output.close(),但输出为空行
output = new FileOutputStream(basepath + "/home.png");
从未被执行过。
您需要更正您的网址(请参阅说明here)并且您需要更正您的异常处理,例如MalformedURLException,这只会在您设置网址的值时被抛出,并且因此,当执行“finally”块时,输出或输入永远不会有非空值。
您的网址可能应为“http://something/Suresh/images/home.png”或“file://something/Suresh/images/home.png”。如果home.png文件位于Android设备的另一台计算机上,请尝试通过Web浏览器访问它,并使用网络浏览器显示的URL和“http://”。