2013-04-21 24 views
6

Podniosłem stary kod do przebudowania i jedna z metod używanych do pracy na moim tablecie i telefonie już nie działa. Próbuję użyć rutyny, którą wybrałem tutaj, aby uzyskać mój adres IP.NetworkInterface.getNetworkInterfaces() generuje wyjątek z pustym łańcuchem komunikatów

Gdy program wykonuje wiersz 4 (zaczynając od "for (Enumeration ..."), natychmiast przeskakuje do sekcji catch wyjątków.Wyjątek nie ma komunikatu, a dla ciągu ex.getMessage() zwraca wartość null. liczba jest 830034796568 (dziesiętny).

Oto kod. Jak wspomniano to działało dobrze rok temu.

Dzięki za wszelką pomoc!

public String getLocalIpAddress() { 
    String address= null; 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       address = new String(inetAddress.getHostAddress().toString()); 
       if (!inetAddress.isLoopbackAddress() && address.length() < 18) { 
        return inetAddress.getHostAddress().toString(); 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     String msg = ex.getMessage(); 
     //do nothing 
    } 
    return null; 
} 
+0

Czy możesz owinąć wyjątek SocketException w RuntimeException i ponownie go rzucić, abyśmy mogli zobaczyć pełny stacktrace? – alex

+0

Zmieniłem go na "throw RuntimeException (ex), stacktrace pokazane przez debugger Eclipse ma wartość null Jestem trochę nowy w tym i zardzewiały na rozruch.Czy jest coś, co mogę zrobić, aby pokazać informacje, które pomogą innym pomóc ja? – moticon

+0

Pozwoliłem na pozwolenie dla android.permission.INTERNET, ale chybiłem android.permission.ACCESS_NETWORK_STATE. – moticon

Odpowiedz

9

prostu do wyjaśnienia z pełną odpowiedź.

NetworkInterface.getNetworkInterfaces() 

rzuca SocketException jeżeli wniosek brakuje tego uprawnienia w AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 

w moich testów (na Androidzie 4.4.2) android.permission.ACCESS_NETWORK_STATE może zostać pominięta.

+0

Ale mogę mieć interfejsy bez internetu, czy istnieje sposób na uzyskanie interfejsów sieciowych bez zgody interfejsu – Saby

+0

Jesteś oszczędzającym życie !!! dziękuję bardzo, dziel się wiedzą. –