在我正在处理的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地址数。在这段代码中,我有一个String数组,它将ip地址与数组的第一个元素中的主机名一起转换为字符串。最后,position [0]将保存原始数组中所有InetAddresses的ip地址和主机名。查看文档,InetAdress.toString()应该提供主机名,但它不会这样做。我最终会发生什么
"/0.0.0.0(com.example.Test.MainActivity$hostLookUp@42244450)"
其中0.0.0.0是出现的IP地址,而42244450只是一些不断变化的数字。我只想要显示正确的主机名,为什么会显示应用程序名称?