我拿起了我的一些舊代碼進行重建,並且以前在我的平板電腦和手機上工作的一種方法不再有效。我正嘗試使用我在這裏拿到的例程來獲取我的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;
}
您是否可以將SocketException封裝在RuntimeException中並重新拋出它,以便我們可以看到完整的堆棧跟蹤? – alex 2013-04-21 02:10:45
我把它改成了「throw RuntimeException(ex); Eclipse調試器顯示的堆棧跟蹤爲空,我對此有點新鮮感,並且生鏽以便啓動。我? – moticon 2013-04-21 02:21:00
我允許android.permission.INTERNET權限,但錯過了android.permission.ACCESS_NETWORK_STATE。 – moticon 2013-04-21 02:45:20