我做了:
java.net.InetAddress serverAddr;
try {
serverAddr = java.net.InetAddress.getByName(Server.SERVERNAME);
}
catch (java.net.UnknownHostException exception) {
//System.err.println ("wrong server name !!!");
HelloWorldActivity.tv.setText("wrong server name !!!");
return;
}
在我的Android应用程序中,但它永远不会解析主机名,无论我使用什么名称,它总是抛出异常。
但是在同一个模拟器上使用互联网,我已经添加了
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
到AndoidManifest.xml
这里是那些假设我没有
的服务器类public class Server
{
public static String SERVERNAME = "monster.idsoftware.com";
public static String SERVERIP = "209.85.129.99";
public static int SERVERPORT = 27950;
public static int PROTOCOL = 68;
}
答案 0 :(得分:5)
我遇到了类似的问题,我发现在某些版本的android(来自honeycombs)中,默认情况下不允许从主线程执行网络操作。所以你可以通过两种方式解决它。在不同的线程中执行操作或允许在主线程中进行网络操作。要做到这一点,请使用以下内容:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
答案 1 :(得分:4)
我找到了答案。无论出于何种原因,您必须使用:
java.net.InetAddress[] x= java.net.InetAddress.getAllByName(Server.SERVERNAME) ;
HelloWorldActivity.tv.setText("Address: "+x[0].getHostAddress());
答案 2 :(得分:1)
你必须这样做很奇怪。 java.net.InetAddress.getByName
开箱即用,适用于我。
Android模拟器中存在与DNS解析相关的一些(正在进行的)问题,因此可能就是这样。
答案 3 :(得分:0)
不知道这是不是一个错字,但你说你有:
<use-permission id="android.permission.INTERNET" />
但必须是:
<uses-permission android:name="android.permission.INTERNET" />
我尝试了getByName,它运行正常。
可能是您修复了权限并同时从getByName切换到getAllByName?只是好奇,如果你能确认getByName仍然不适合你吗?