私が取り組んでいる 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 は変化し続ける数字です。正しいホスト名が表示されるようにしたいのですが、代わりにアプリ名が表示されるのはなぜですか?