3

私は Android dev の初心者です。私はまだ学習中であり、アプリ開発の最初のステップにいます。

私はこのコードを動作させており、正常または通常の Java を実行しています。現在、Android OS に実装しようとしています。

TEST.openStream()私のコードでは、Unhandled exception type IOExceptionエラーが発生します。

 package com.zv.android;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;

public class ZipActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            URL TEST = new URL("http://www.google.com/");
            BufferedReader in = new BufferedReader(new InputStreamReader(TEST.openStream()));

            String inputLine;
            int line=0;
            while ((inputLine = in.readLine()) != null){
                line++;
                       //System.out.println(line + "\t" + inputLine); 
            }
           // in.close();
        } catch(MalformedURLException e) {
            //Do something with the exception.
        }

    }
}
4

3 に答える 3

10

エラー メッセージは単純です: をキャッチIOExceptionする必要があります。URL.openStream()

public final InputStream openStream() throws IOException

したがって、メソッドの契約を受け入れることで、この例外を処理する必要があるという事実も受け入れます。これが Java での動作です。これはチェックされた例外です。この種の例外は発生する可能性があり、コードで処理する必要がある状況を表しているため、キャッチする必要があります。

それをキャッチするには、tryステートメントに別のケースを追加するだけです:

try {
  ..
catch (MalformedURLException e) {
  ..
}
catch (IOException e) {
  ..
}

最後の注意として、メソッドを呼び出すときにそれをキャッチする必要はありません。呼び出したopenStream()メソッドがopenStream()呼び出し元に例外を転送することを述べることができますが、呼び出しチェーンの最後にそれをキャッチする必要がありますいずれにせよ。

于 2012-11-28T22:02:56.917 に答える
3

また、 for (or) declare method as throwsIOExceptionのように、キャッチします。MalformedURLExceptionIOException

try {
            URL TEST = new URL("http://www.google.com/");
            BufferedReader in = new BufferedReader(new InputStreamReader(TEST.openStream()));

            String inputLine;
            int line=0;
            while ((inputLine = in.readLine()) != null){
                line++;
                       //System.out.println(line + "\t" + inputLine); 
            }
           // in.close();
        } catch(MalformedURLException e) {
            //Do something with the exception.
        } catch(IOException e2) {
            //Do something with the exception.
        }

IOExceptionキャッチ (または) 再スローする必要がある例外をチェックします。詳細については、このチュートリアルを参照してください。

openStream()メソッドは、異常な場合に IOException をスローする可能性があるため、IOException をキャッチする必要があります。

于 2012-11-28T22:01:00.000 に答える
1
TEST.openStream()

javaのチェック済み例外である IOException をスローする可能性があるため、 try/catchブロックを使用して IOException を処理するか、 throws句を使用してメソッド シグネチャで IOException を宣言する必要があります。

catch ブロックで IOException を処理する必要があります。

 try {
            URL TEST = new URL("http://www.google.com/");
            BufferedReader in = new BufferedReader(new InputStreamReader(TEST.openStream()));
             //rest of your code
             } catch(MalformedURLException e) {
            //Do something with the exception.
        }

        catch(MalformedURLException e) {
        //Do something with the exception.
         }
         catch(IOException ex) {
             ex.printStackTrace();
       }

メソッド シグネチャで IOException を宣言します。

 public void onCreate(Bundle savedInstanceState) throws IOException {

この場合、コードを try/catch 内にラップしないでください。ただし、throws 句を使用して例外を宣言するのではなく、常に try/catch を使用して例外を処理することを強くお勧めします。

于 2012-11-28T22:02:31.420 に答える