Android未报告的异常IOException错误

时间:2016-10-18 10:17:49

标签: java android ioexception

我是Android应用程序开发的新手。最近,我正在编写一个能够根据Ipify显示公共IP的应用程序。到目前为止,我已经:

  • 下载所需的jar文件并放入libs文件夹
  • 我也在gradle中编译文件
  • 然后我将所需的课程导入我的班级

如何使用Ipify,根据其网站:

import org.ipify.Ipify;

public class HelloIP {
    public static void main(String[] args) throws IOException {
        System.out.println(Ipify.getPublicIp());
    }
}

我编写以下方法从另一个类调用:

public static String getPublicIp() throws IOException{
    String ip = Ipify.getPublicIp();
    return ip;
}

另一个班级

//Get wifi
getWifiName wifiInfo = new getWifiName();
String myIP = wifiInfo.getPublicIp();

然而,我一直得到:

  

错误:(52,43)错误:未报告的异常IOException;必须抓住   或宣布被抛出

我尝试修改代码并使用以下try和catch,但仍然遇到同样的错误。

public static String getPublicIp() throws IOException{
    String myip = Ipify.getPublicIp();
    try{
        return myip;
    }
    catch (IOException e){
        System.out.println("General I/O exception: " + e.getMessage());
        e.printStackTrace();
    }
}

我不太好捕捉和抛出异常,并且已经花了一整天时间。我再也没有想法来解决这个错误..T.T

1 个答案:

答案 0 :(得分:1)

public static String getPublicIp() {
    try{
        return Ipify.getPublicIp();
    }catch (IOException e){
        System.out.println("General I/O exception: " + e.getMessage());
        e.printStackTrace();
    }
    return null;
}

如果它没有帮助,请在IDE中clean project。您可能有一些数据被缓存,这可能是一个原因。

您的问题出在另一个班级!正如您已声明方法getPublicIp()抛出IOException,该类害怕接收Exception并因此请求捕获它。

在Java中,您有两种类型的例外。选中并取消选中。必须检查已检查的例外情况。

在Java中,异常用于标记意外情况。例如,将非数字String解析为数字(NumberFormatException)或在null引用(NullPointerException)上调用方法。你可以通过多种方式捕捉它们。

未经核实的ExceptionRunTimeException扩展名的Exception。它们用于标记通常由用户输入引起的意外状态。它们不应该造成伤害,应该用业务逻辑来解决。你不必抓住它们,但有时你应该抓住它们。

另一方面,Checked try{ //some code } catch (NumberFormatException e1) { e.printStackTrace() //very important - handles the Exception but prints the information! } catch (NullPointerException e2) { e.printStackTrace(); } 标记危险情况。例如,应用程序无法打开文件。由于这些情况很危险,你必须抓住它们。

Exception

或使用这一事实,他们都扩展try { //somecode } catch (Exception e) { e.printStackTrace; };

try {
    //somecode
} catch (NullPointerException | NumberFormatException e) {
    e.printStackTrace;
};

或者自Java 7以来:

.nojekyll