#java #android #ioexception
#java #Android #исключение ioexception
Вопрос:
Я новичок в разработке приложений для Android. Недавно я написал приложение, которое может отображать общедоступный IP-адрес на основе Ipify. До сих пор я уже:
- Загрузите требуемый файл 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, о котором не сообщается; должно быть перехвачено или объявлено выброшенным
Я попытался изменить код и использовать следующую попытку и перехватить, но все равно получил ту же ошибку.
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. и используйте следующую попытку и перехват … попробуйте простое
return
утверждение … увлекательно2. В чем причина отказа?
Ответ №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;
}
В случае, если это не помогло, clean project
в вашей IDE. Возможно, у вас есть некоторые данные в кэше, и это может быть причиной.
Ваша проблема в другом классе! Поскольку вы объявили метод getPublicIp()
для выброса IOException
, этот класс боится получения Exception
и, следовательно, запросов, перехватывающих его.
В Java у вас есть два типа исключений. Проверено и снято. Проверенные исключения должны быть перехвачены.
В Java исключения используются для обозначения непредвиденных ситуаций. Например, синтаксический анализ нечислового String
числа в число ( NumberFormatException
) или вызов метода по null
ссылке ( NullPointerException
). Вы можете поймать их многими способами.
Непроверенные Exception
s — это те, которые расширяются RunTimeException
. Они используются для обозначения неожиданных состояний, обычно вызываемых вводом пользователя. Они не должны причинять вреда и должны быть проработаны с бизнес-логикой. Вам не обязательно их перехватывать, но иногда вы должны.
С другой стороны, есть отмеченные флажки Exception
, которые отмечают опасные ситуации. Например, приложение не может открыть файл. Поскольку эти ситуации считаются опасными, вы должны их перехватить.
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;
};
или начиная с Java 7:
try {
//somecode
} catch (NullPointerException | NumberFormatException e) {
e.printStackTrace;
};
Комментарии:
1. Спасибо за информацию о том, как снять флажок и проверить исключение, это новая информация для меня. Мне удалось запустить код, однако я использую другую библиотеку, которая является JSOUP.