我是Android应用程序开发的新手。最近,我正在编写一个能够根据Ipify显示公共IP的应用程序。到目前为止,我已经:
如何使用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
答案 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
)上调用方法。你可以通过多种方式捕捉它们。
未经核实的Exception
是RunTimeException
扩展名的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