首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android API-23: InetAddressUtils替换

Android API-23: InetAddressUtils替换
EN

Stack Overflow用户
提问于 2015-08-21 21:38:16
回答 3查看 14.6K关注 0票数 20

切换到Android Marshmallow API,我在代码中使用了InetAddressUtils.isIPv4Address(ipAddress)org.apache.http.conn.util.InetAddressUtils来列出设备上的所有IP。

作为API-23 changes的一部分,InetAddressUtils类现在已经不存在了。

现在我如何替换下面的代码呢?

代码语言:javascript
复制
public static String ipAddress() {
    try {
        for (final Enumeration<NetworkInterface> enumerationNetworkInterface = NetworkInterface.getNetworkInterfaces(); enumerationNetworkInterface.hasMoreElements();) {
            final NetworkInterface networkInterface = enumerationNetworkInterface.nextElement();
            for (Enumeration<InetAddress> enumerationInetAddress = networkInterface.getInetAddresses(); enumerationInetAddress.hasMoreElements();) {
                final InetAddress inetAddress = enumerationInetAddress.nextElement();
                final String ipAddress = inetAddress.getHostAddress();
                if (! inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipAddress)) {
                    return ipAddress;
                }
            }
        }
        return null;
    }
    catch (final Exception e) {
        LogHelper.wtf(null, e);
        return null;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2015-08-30 08:09:05

我找不到比转换成Inet4Address或Inet6Address更好的方法了

代码语言:javascript
复制
public boolean isValidIp4Address(final String hostName) {
      try {
         return Inet4Address.getByName(hostName) != null;
     } catch (UnknownHostException ex) {
         return false;
     } 
}

public boolean isValidIp6Address(final String hostName) {
      try {
         return Inet6Address.getByName(hostName) != null;
     } catch (UnknownHostException ex) {
         return false;
     } 
}

请注意,getHostByName实际上执行查找,这并不总是可取的。

或者,您可以获得InetAddessUtils的源代码,它与getByName()不同,它不执行查找,但只接受以点分隔的地址。代码真的很小。它使用Android支持的regexp类。只需删除不太重要的不可变注释,它就会编译!

票数 4
EN

Stack Overflow用户

发布于 2016-09-29 13:32:58

要在SDK23中使用该库,请在项目的build.gradle文件中添加以下行:

代码语言:javascript
复制
useLibrary 'org.apache.http.legacy'
票数 3
EN

Stack Overflow用户

发布于 2016-04-27 22:44:07

使用try catch作为逻辑是一种可怕的做法,只有在完全无法避免的情况下才应该这样做。

改用下面这样的代码:

代码语言:javascript
复制
if (inetAddress instanceof Inet4Address){
    //do something
}  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32141785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档