2013-04-21 11 views
6

Ich nahm etwas alten Code von mir auf, um wieder aufzubauen, und eine der Methoden, die an meinem Tablet und Telefon arbeiteten, funktioniert nicht mehr. Ich versuche, eine Routine zu verwenden, die ich hier abgeholt habe, um meine IP-Adresse zu bekommen.NetworkInterface.getNetworkInterfaces() löst Ausnahme mit null Nachrichtenzeichenfolge

Wenn das Programm Zeile 4 ausführt (beginnend mit "for (Enumeration ...") springt es sofort in den Ausnahmefangabschnitt. Die Ausnahme hat keine Nachricht und für die Zeichenfolge gibt ex.getMessage() null zurück Nummer 830034796568 (dezimal).

Hier ist der Code. Wie bereits erwähnt diese feinen vor einem Jahr gearbeitet.

Vielen Dank für jede Hilfe!

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

Können Sie die SocketException in eine RuntimeException umbrechen und erneut ausführen, damit wir den vollständigen StackTrace sehen können? – alex

+0

Ich habe es in "throw RuntimeException (ex) geändert. Der StackTrace vom Eclipse-Debugger ist null. Ich bin ein bisschen neu und rostig. Gibt es etwas, was ich tun kann, um die Informationen zu zeigen, die anderen helfen können." – moticon

+0

Ich erlaubte die Erlaubnis für android.permission.INTERNET, aber vermisste android.permission.ACCESS_NETWORK_STATE.One – moticon

Antwort

9

Nur mit einer vollständigen Antwort zu klären.

NetworkInterface.getNetworkInterfaces() 

wirft einen SocketException, wenn die Anwendung diese Berechtigung fehlt in AndroidManifest.xml

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

In meinen Tests (auf Android 4.4.2) android.permission.ACCESS_NETWORK_STATE kann übersprungen werden.

+0

Aber ich kann Schnittstellen ohne Internet haben, gibt es eine Möglichkeit, Netzwerkschnittstellen ohne Schnittstelle Erlaubnis zu bekommen – Saby

+0

Sie sind Lebensretter !!! Vielen Dank, teilen Sie Ihr Wissen weiter. –

Verwandte Themen