2013-04-21 7 views
6

Ho recuperato un vecchio codice di mio per ricostruire e uno dei metodi utilizzati per il mio tablet e telefono non funziona più. Sto cercando di usare una routine che ho scelto qui per ottenere il mio indirizzo IP.NetworkInterface.getNetworkInterfaces() genera un'eccezione con una stringa di messaggi null

Quando il programma esegue la riga 4 (che inizia con "per (Enumerazione ...") salta immediatamente alla sezione di cattura delle eccezioni L'eccezione non ha alcun messaggio e per la stringa ex.getMessage() restituisce null. numero è 830.034.796.568 (decimale).

Ecco il codice. Come già detto questo ha funzionato bene un anno fa.

Grazie per qualsiasi aiuto!

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

È possibile racchiudere SocketException in una RuntimeException e ridistribuirlo in modo da poter vedere lo stacktrace completo? – alex

+0

L'ho modificato in "throw RuntimeException (ex); lo stacktrace mostrato dal debugger di Eclipse è nullo, sono un po 'nuovo e arrugginito per l'avvio. C'è qualcosa che posso fare per mostrare le informazioni che aiuteranno gli altri ad aiutare io? – moticon

+0

stavo permettendo il permesso per android.permission.INTERNET, ma mancavo android.permission.ACCESS_NETWORK_STATE. – moticon

risposta

9

solo per chiarire con una risposta completa.

NetworkInterface.getNetworkInterfaces() 

tiri un SocketException se l'applicazione non è presente questa autorizzazione in AndroidManifest.xml

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

Nel mio test (su Android 4.4.2) android.permission.ACCESS_NETWORK_STATE possono essere ignorati.

+0

Ma posso avere interfacce senza internet, c'è un modo per ottenere interfacce di rete senza permesso di interfaccia – Saby

+0

Sei salva vita !!! grazie mille, continua a condividere conoscenza –