2013-04-21 218 views
6

我拿起了我的一些舊代碼進行重建,並且以前在我的平板電腦和手機上工作的一種方法不再有效。我正嘗試使用我在這裏拿到的例程來獲取我的IP地址。NetworkInterface.getNetworkInterfaces()拋出空消息字符串異常

當程序執行第4行時(以「for(Enumeration ...」開頭)立即跳轉到異常捕獲部分,異常沒有消息,並且對於字符串ex.getMessage()返回null。號碼是830034796568(十進制)。

下面的代碼。如前所述這工作得很好一年前。

感謝您的幫助!

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

您是否可以將SocketException封裝在RuntimeException中並重新拋出它,以便我們可以看到完整的堆棧跟蹤? – alex 2013-04-21 02:10:45

+0

我把它改成了「throw RuntimeException(ex); Eclipse調試器顯示的堆棧跟蹤爲空,我對此有點新鮮感,並且生鏽以便啓動。我? – moticon 2013-04-21 02:21:00

+0

我允許android.permission.INTERNET權限,但錯過了android.permission.ACCESS_NETWORK_STATE。 – moticon 2013-04-21 02:45:20

回答

9

只是爲了一個完整的答案澄清。

NetworkInterface.getNetworkInterfaces() 

拋出一個SocketException如果應用程序缺少此權限在AndroidManifest.xml

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

在我的測試(在Android 4.4.2)android.permission.ACCESS_NETWORK_STATE可以跳過。

+0

但是我可以有沒有互聯網的接口,有沒有什麼辦法可以獲得沒有接口權限的網絡接口 – Saby 2016-03-04 05:27:59

+0

你是救命啊!非常感謝你,繼續分享知識。 – 2016-10-02 17:23:08