0

我准备了从服务器下载图像并存储在 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()错误。请帮助我。

4

1 回答 1

0

您在 output.close() 获得 NullPointerException 的原因是您的 URL 格式不正确。对于初学者,它不包含有效的协议。这将导致 MalformedURLException 在线抛出

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

然后您将直接进入 catch 块,然后是调用 output.close() 的 finally 块,但输出为空,因为该行

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

从未被处决。

您需要更正您的 URL(请参阅此处的描述)并且您需要更正您的异常处理,如 MalformedURLException 的情况,这只会在您设置 url 的值的地方被抛出,因此您永远不会有一个非- 执行“finally”块时输出或输入的空值。

您的 URL 应该是“http://something/Suresh/images/home.png”或“file://something/Suresh/images/home.png”的形式。如果 home.png 文件位于 Android 设备的另一台机器上,请尝试通过 Web 浏览器访问它,并使用 Web 浏览器显示的 URL 并加上“http://”。

于 2012-06-21T12:58:43.820 回答