无法在android中获取`java.net.UnknownHostException`的堆栈跟踪

时间:2016-02-23 07:27:22

标签: java android

我试图在Android中获取主机名为nirranjan-pc的机器的IP地址,并根据this问题

的答案尝试使用下面的代码
Log.e(tag, "In background method :: ");
try {
    String ip = InetAddress.getByName("nirranjan-pc").getHostAddress();
    Log.e(tag, "++++++++++++ IP FOUND :: " + ip);
} catch (Exception ex) {
    Log.e(tag, "Exception:: " + ex);
    Log.e(tag, Log.getStackTraceString(ex));
    Log.e(tag, "Exception Host ", ex);
} finally {
    Log.e(tag, "Finally::");
}

但我没有获得IP地址,也无法使用UnknownHostExceptionLog.e(tag, Log.getStackTraceString(ex));方法获得Log.e(tag, "Exception Host ", ex);的完整堆栈跟踪。

只有Log.e(tag, "Exception:: " + ex);方法可以正常使用。

我的logcat在下面。

02-23 12:23:24.308 16507-16618/in.gauriinfotech.sevadeal E/Favour: In background method :: 
02-23 12:23:24.350 16507-16513/in.gauriinfotech.sevadeal W/art: Suspending all threads took: 14.457ms
02-23 12:23:24.377 16507-16618/in.gauriinfotech.sevadeal E/Favour: Exception:: java.net.UnknownHostException: Unable to resolve host "nirranjan-pc": No address associated with hostname
02-23 12:23:24.380 16507-16618/in.gauriinfotech.sevadeal E/Favour: Exception Host 
02-23 12:23:24.380 16507-16618/in.gauriinfotech.sevadeal E/Favour: Finally::

我的问题

1)为什么Log.e(tag, Log.getStackTraceString(ex));Log.e(tag, "Exception Host ", ex);方法无法正常运行且没有给出堆栈跟踪。

2)我在java桌面应用程序中没有任何错误地获得了正确的IP地址。为什么它不能用于android?

- 我还尝试使用Android中的Google Chrome浏览器访问相同内容

它可以正常使用IP地址

When i try with IP address

但不使用机器名称

When i try with Machine Name

奇怪的是,当我尝试从Windows Phone从浏览器打开网站时,它会打开而没有错误。

2 个答案:

答案 0 :(得分:2)

您的堆栈跟踪的原因是Log类的来源 UnknownHostException例外未打印

如果您检查代码,则可以看到Log.getStackTraceString()方法已在ICS中修补,以便在String的情况下返回空UnknownHostException

这里是relevant code

//To reduce the amount of log spew that apps do in the non-error
// condition of the network being unavailable.

Throwable t = tr;
while (t != null) {
    if (t instanceof UnknownHostException) {
        return "";
    }
 t = t.getCause();

答案 1 :(得分:1)

关于第一个问题,请尝试使用Throwable.printStackTrace(PrintWriter pw)来获取堆栈跟踪:

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
Log.e(tag, sw.toString());

对于您的第二个问题,可能是您的DNS未正确配置以查找并将主机名转换为正确的IP。

修改

还要看看第二个问题Android Browser hostnames does not get resolved if domain name is not appended