0

サーバーから画像をダウンロードしてSDカードに保存するためのコードを用意しました。そのためにコードを用意しました。

 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ブロックに移動しますが、行がnullであるため、出力はnullになります。

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

実行されたことはありません。

URLを修正する必要があり(ここの説明を参照)、MalformedURLExceptionの場合のように、例外処理を修正する必要があります。これは、urlの値を設定した場合にのみスローされるため、 -「finally」ブロックが実行されたときの出力または入力のnull値。

URLは、おそらく「http://something/Suresh/images/home.png」または「file://something/Suresh/images/home.png」の形式である必要があります。home.pngファイルがAndroidデバイスとは別のマシンにある場合は、Webブラウザーを介してアクセスし、Webブラウザーに表示される「http://」が付いたURLを使用してみてください。

于 2012-06-21T12:58:43.820 に答える