-1
static String[] hosts = {"www.google.com", "www.nba.com"};
//static String[] hosts = {"www.google.com"};
static StringBuilder sb;

for(String host : hosts){
try {
       inetAddress = InetAddress.getAllByName(host);
       sb = new StringBuilder();                             
            for (int i = 0; i < inetAddress.length; i++) {
                sb.append(inetAddress[i]).append(",");
            }
     }

       catch (UnknownHostException e) {
       e.printStackTrace();
     }

在这里它将返回 Google 和 NBA 的所有 IP 地址的数组。

使用 String Builder 优先设置它。

       prefs.sethostIPaddress(context, sb.toString());

}

从 Preference 中检索:

        String getipprefs = (prefs.gethostIPaddress(context));
        arrayA = getipprefs.split(",");
            for (int a = 0; a < arrayA.length; a++) {
                 Log.d("IPADDR", "Old IP : " + arrayA[a]);                      
            }

当我只使用一个主机名时,这种方法非常有效,但如果我使用多个主机名,请说“Google & NBA”。它只会从偏好中返回我的 NBA,它不会附加 Google IP 地址。我猜在 FOR 循环或 APPENDING 中有一些问题。有什么猜测吗?

4

2 回答 2

1

将此行移出 for 循环。对于每个实例,您正在创建一个新StringBuilder对象,在循环完成后将只保存最后一个值。

    sb = new StringBuilder();
于 2013-02-20T07:02:29.090 回答
0

你的代码:

for(String host : hosts){
try {
       inetAddress = InetAddress.getAllByName(host);
       sb = new StringBuilder();                             // for every host
            for (int i = 0; i < inetAddress.length; i++) {
                sb.append(inetAddress[i]).append(",");
            }
     }

StringBuilder在我添加的行中,您正在为每个主机创建一个新的注释。这就是为什么它只会包含在你的外部 for 循环的最后一次迭代中添加到它的内容。(在您的情况下是 nba.com)。当您调用prefs.sethostIPaddress(context, sb.toString());thensb时将仅包含最后一个hostfrom hosts

要修复它,您必须将此行移到我在此答案中发布的第一行的前面。

于 2013-02-20T06:59:29.700 回答