3

我在 Android 开发中完全是菜鸟。我仍在学习,我正处于我的应用程序开发的第一步。

我有这个代码工作,它运行正常或常规 Java,现在我正在尝试实现 Android 操作系统。

在我的代码中,它说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

也可以捕获IOException,就像您为MalformedURLException (或)将方法声明为 throws所做的那样IOException

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是检查异常,需要捕获(或)重新抛出。有关更多信息,请参阅本教程

您需要捕获 IOException,因为openStream()方法在异常情况下可能会抛出 IOException。

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

可能会抛出一个 IOException ,它是 Java 中的已检查异常,因此您必须使用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 中,尽管我强烈建议始终使用 try/catch 处理异常,而不是使用 throws 子句声明它。

于 2012-11-28T22:02:31.420 回答