2010-07-22 33 views
67

我正在使用Android SDK 2.2,使用模擬器測試我的應用程序。我想發送一個HTTP Post。當我做我得到一個UnknownHostException。我已經在manifest.xml中放置了所需的權限
<uses-permission android:name="android.permission.INTERNET" />
。此外,我可以在模擬器上打開瀏覽器並導航到URL,沒有問題。Android:UnknownHostException

這裏是我的代碼:

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(uri); 
HttpResponse response = null; 
try 
{ 
// Add your data 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
2); 
nameValuePairs.add(new BasicNameValuePair("id", "edit-name")); 
nameValuePairs 
.add(new BasicNameValuePair("stringdata", userName)); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

// Execute HTTP Post Request 
response = httpclient.execute(httppost); 
// Log.i("HttpManager:", "======> response: " 
// + response.getEntity().getContent()); 

} 
catch (ClientProtocolException e) 
{ 
Log.e("HttpManager", "ClientProtocolException thrown" + e); 
} 
catch (IOException e) 
{ 
Log.e("HttpManager", "IOException thrown" + e); 
} 
+0

'} \t \t \t趕上(例外五) \t \t \t { \t \t \t \t的System.out.println( 「錯誤:」 + e)條; \t \t \t} \t \t趕上(ClientProtocolException E) \t \t { \t \t Log.e( 「HttpManager」, 「ClientProtocolException拋出」 + E); \t \t} \t \t趕上(IOException的E) \t \t { \t \t Log.e( 「HttpManager」, 「IOException的拋出」 + E); \t \t}' This顯示錯誤說已處理異常。 – 2016-06-25 18:50:35

回答

115

好吧,我覺得很跛腳... Internet權限標籤是清單標籤,而不是應用程序標籤的孩子。嘖!

+1

對於其他新手像我一樣,加入你的清單下面某處後右: <使用許可權的android:name =「android.permission.INTERNET對」 /> – infinity 2011-11-20 20:49:17

2

當測試一個minSdkVersion設置爲4的應用程序時,我遇到了類似的問題,我試圖在G1上運行它。改爲3解決了我的問題。

+0

很奇怪,但我有完全相同的問題,改變德minSdkVersion解決了我的問題 – 2011-10-11 20:21:36

+0

這也適用於我。我有minSdkVersion =「7」。我把它設置爲「6」,它工作。 – Gagege 2012-07-26 18:51:03

51

對於其他人的考慮,我遇到了這個問題,Google找到了我。正如anisbet所說的,我仔細檢查了我的許可標記,並且它在正確的位置。

我最終激發了內置瀏覽器的android,並得到了我的web服務器和Google.com(儘管計算機本身很好)的相同響應。我終止了android模擬器並重新啓動;第一次嘗試。

查看您的代碼後,可能需要重新啓動模擬器。平心而論,這樣做後,一堆程序不久就崩潰了,所以也許在我的電腦中發生了其他事情。儘管如此,這浪費了我大量的時間,所以也許這可以幫助我解決頭痛的問題。

祝你好運!

+0

同樣適用於在實際設備上進行調試 - 只需重新啓動:) – 2011-11-23 14:01:51

+0

Android模擬器似乎並不喜歡某些網絡更改,即使是英特爾HAXM加速的薑餅模式。如果我從一個WiFi網絡移動到由MiFi供電的網絡,它會給我這個錯誤,我最終重新啓動模擬器。 – louielouie 2012-06-10 00:19:14

2

我遇到了同樣的問題。我在Android Manifest文件中擁有正確的權限,Url也是正確的。我正在Web瀏覽器中獲得響應。我重新啓動了IDE,Emulator,但沒有解決問題。所以我使用AVD管理器刪除了AVD,然後啓動了模擬器並開始工作。

17

你知道什麼是解決了這個問題對我來說是把權限剛剛閉幕清單標記之前,像這樣:

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

如果沒有上述工作,儘量退後一步,並確保你的設備或模擬器實際上可以通過打開瀏覽器到達互聯網。

1

另一件事:事實證明,互聯網本身並不適合我。使用這些開關從命令行啓動模擬器爲我解決了這個問題:emulator -avd your_avd_name -dns-server 8.8.8.8

32

確保您有互聯網連接。當我忘記使用沒有互聯網連接的手機進行測試時,這就是我發生的事情。

+0

哦,哇,我不相信這是我的問題!確保使用額外的測試設備的傢伙無線上網!謝謝 – 2013-05-16 00:08:34

+0

是的,我假設互聯網通過USB調試電纜,但當然,它直接從手機! – Lukos 2013-06-17 12:54:20

+0

這是愚蠢的:P ..我有同樣的問題..謝謝 – ghostrider 2016-03-27 13:41:59

8

它有時會在模擬器中運行應用程序時發生。只需重新啓動模擬器就可以解決問題。它爲我工作!

+2

這麼簡單,但工作得很好。 – 2013-04-13 10:06:50

2

最後的檢查將是您的域名是一個有效的域。在域中有下劃線是無效的,並會拋出未知的主機異常。

+0

這是一個罕見的問題,但真的很煩人!請參閱解釋[這裏](http://stackoverflow.com/a/11206362/465942) – 2015-03-24 14:57:04

0

入住這也是如果你不使用模擬器

我今天得到了同樣的問題,我不使用仿真器,但啓用了USB調試移動進行測試。

我沒有打開手機中的數據,所以我得到了UnknownHostException,一旦開機就解決了。

0

如果你打開一個VPN,「未知主機異常」可結果

0

我遇到了同樣的問題,使用模擬器的時候,因爲我在我的筆記本wifi的變化使重新啓動仿真器的無線網絡解決我的問題。