我试图在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地址,也无法使用UnknownHostException
和Log.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地址
但不使用机器名称
奇怪的是,当我尝试从Windows Phone从浏览器打开网站时,它会打开而没有错误。
答案 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