1

在我正在开发的 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 只是一些不断变化的数字。我只想显示正确的主机名,为什么会显示应用程序名称?

4

0 回答 0