在我正在开发的 android 应用程序中,我只是想获取与 ip 地址相对应的主机名。
private class hostLookUp extends AsyncTask<InetAddress, Integer, String>{
protected String doInBackground (InetAddress...ip){
int count = ip.length;
for (int i = 0; i < count; i++){
String hostName = ip[i].getHostName();
if (isCancelled()) return "ERROR";
else return hostName;
}
return null;
}
}
对我来说重要的代码代码是
String hostName = ip[i].getHostName();
使用 AsyncTask 实现它的唯一原因是因为 android 不允许我在主线程中调用该函数。前面的代码用于包含以下代码的子程序
for (int i = 0; i < connectionCount; i++){
statusList[i][0] = addressList[i].toString() + "(" + new hostLookUp().execute(addressList[i]) + ")";;
temp = connectionStatus (statusList[i][1]);
statusList[i][1] = temp;
}
此时在子程序中,connectionCount 是存储在 InetAddress 数组中的 ip 地址数。在这段代码中,我有一个字符串数组,它将保存转换为字符串的 IP 地址以及数组第一个元素中的主机名。最后,位置 [0] 将保存原始数组中所有 InetAddress 的 IP 地址和主机名。查看文档,InetAdress.toString() 无论如何都应该提供主机名,但它没有这样做。最终发生的事情是我得到
"/0.0.0.0(com.example.Test.MainActivity$hostLookUp@42244450)"
其中 0.0.0.0 是出现的任何 IP 地址,而 42244450 只是一些不断变化的数字。我只想显示正确的主机名,为什么会显示应用程序名称?