Ошибка исключения IOException, о которой не сообщается в Android

#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.