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] には、元の配列内のすべての InetAddresses の IP アドレスとホスト名が保持されます。ドキュメントを見ると、 InetAdress.toString() はとにかくホスト名を提供する必要がありますが、それは行いません。最終的に何が起こるかというと、I get

"/0.0.0.0(com.example.Test.MainActivity$hostLookUp@42244450)"

0.0.0.0 は IP アドレスが表示される場所で、42244450 は変化し続ける数字です。正しいホスト名が表示されるようにしたいのですが、代わりにアプリ名が表示されるのはなぜですか?

4

0 に答える 0