Android:未处理的异常类型IOException错误

时间:2012-11-28 22:00:05

标签: java android

我是Android开发者的总菜鸟。我还在学习,而且我正处于我的app 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.
        }

    }
}

3 个答案:

答案 0 :(得分:9)

错误消息很简单:您需要捕获IOException,因为URL.openStream()被声明为

public final InputStream openStream() throws IOException

因此,通过接受方法的契约,您也接受了必须处理此异常的事实,这就是它在Java中的工作方式。这是已检查的异常,然后必须将其捕获,因为此类异常表示可能出现的情况以及您的代码必须处理的情况。

要抓住它,只需在try声明中添加另一个案例:

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

正如最后一点:当你调用openStream()方法时,你不需要捕获它,你可以声明调用openStream()的方法会将异常转发给调用者,但是在任何情况下,你都必须抓住它的结束。

答案 1 :(得分:3)

也抓住IOException,就像你对MalformedURLException(或)声明方法一样抛出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被检查异常,需要捕获(或)重新抛出。有关详细信息,请参阅此tutorial

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

答案 2 :(得分: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子句声明它。