2010-01-19 18 views
5

我做了。InetAddress.getByName在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

我假設你有一個Server.java類?我知道當地址查找失敗時UnknwnHostException被拋出。 – 2010-01-19 20:45:37

+0

是的,上面加了。 – 2010-01-19 20:51:59

+0

此代碼將查詢地震服務器,最新的輸出是什麼? – 2010-01-19 21:13:15

回答

4

我找到了答案。不管什麼原因,你必須使用:

java.net.InetAddress[] x= java.net.InetAddress.getAllByName(Server.SERVERNAME) ; HelloWorldActivity.tv.setText("Address: "+x[0].getHostAddress());

1

奇怪的是,你必須這樣做。 java.net.InetAddress.getByName適合我,開箱即用。

在Android模擬器中有一些(持續)與DNS解析相關的問題,所以可能是這樣。

0

不知道,如果它是一個錯字,但你說你有:

<use-permission id="android.permission.INTERNET" /> 

但它必須是:

<uses-permission android:name="android.permission.INTERNET" /> 

我試圖GetByName方法,它工作正常。

可能是您修復了您的權限並同時從getByName切換到getAllByName?只是好奇,如果你可以確認getByName仍然不適合你?

1

我有類似的問題,我發現在某些版本的android(來自honeycombs)默認情況下不允許從主線程執行網絡操作。所以你可以用兩種方法解決它。在不同的線程中執行操作或允許在主線程中進行網絡操作。要做到這一點使用這樣的事情:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build(); 
StrictMode.setThreadPolicy(policy); 
+0

雖然這是真的,但在UI線程上建立連接是一種非常糟糕的做法,因爲它阻塞線程。 – momo 2014-10-17 06:18:36

+0

謝謝。我需要這個解決方案... – 2015-03-23 11:03:24

+0

雖然這種解決方案可以工作,但並不推薦,這是一種不好的做法。使用AsyncTasks在不同線程中執行網絡操作。 – darshanz 2015-10-14 03:48:26