android – NetworkInterface.getNetworkInterfaces()抛出带有空消息字符串的异常

前端之家收集整理的这篇文章主要介绍了android – NetworkInterface.getNetworkInterfaces()抛出带有空消息字符串的异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我拿起了我的一些旧代码进行重建,其中一种用于我的平板电脑和手机的方法不再有效.我正在尝试使用我在这里获取的例程来获取我的IP地址.

当程序执行第4行(以“for(枚举…”开头),它立即跳转到异常捕获部分.异常没有消息,对于字符串,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;
}

解决方法

只是为了澄清一个完整的答案.
NetworkInterface.getNetworkInterfaces()

如果应用程序在AndroidManifest.xml中缺少此权限,则抛出SocketException

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

在我的测试中(在Android 4.4.2上),可以跳过android.permission.ACCESS_NETWORK_STATE.

猜你在找的Android相关文章