-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]);                      
            }

このアプローチは、ホスト名を 1 つだけ使用する場合は問題なく機能しますが、複数のホスト名を使用する場合は、「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());、最後のfromsbのみが含まれます。hosthosts

これを修正するには、この回答で投稿した最初の行の前にこの行を移動する必要があります。

于 2013-02-20T06:59:29.700 に答える