2010-11-22 14 views
1

我想在andoid中調用其他web服務,但我總是有一個超時異常。 的代碼是:在android中調用rest webservice時超時例外

HttpClient httpclient = new DefaultHttpClient(); 

HttpGet request = new HttpGet("http://XXXX:8080/YYY/zzzz?username=0001epd&password=1111"); 

ResponseHandler<String> handler = new BasicResponseHandler(); 
try { 
     String result = httpclient.execute(request, handler); 
} catch (ClientProtocolException e) { 
      e.printStackTrace(); 
} catch (IOException e) { 
      e.printStackTrace(); 
      } 
httpclient.getConnectionManager().shutdown(); 

你有任何想法,是錯誤?

在清單我加android.permission.INTERNET對

回答

1

如果你在模擬器上運行這個,你有沒有嘗試把上面的URL放在模擬器瀏覽器上,看看你是否得到了結果。如果你能看到結果的瀏覽器,你身後的代理,然後嘗試在你的代碼

HttpParams my_httpParams = new BasicHttpParams(); 

final String proxyHost = android.net.Proxy.getDefaultHost(); 

final int proxyPort = android.net.Proxy.getDefaultPort(); 

if(proxyPort != -1) 
{ 
    my_httpParams.setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(proxyHost, proxyPort));    
} 

添加以下線路經過的HttpParams在DefaultHttpClient

1

也許在您的移動設備或工作站您的網絡連接是減緩或遠程服務需要一些時間。您可以使用互聯網瀏覽器來測試它以請求REST網址。

至少你可以嘗試增加你的代碼超時:

final int timeout = 10000; //ms 
HttpConnectionParams.setConnectionTimeout(httpParams, timeout); 
HttpConnectionParams.setSoTimeout(httpParams, timeout); 
final HttpClient httpclient = new DefaultHttpClient(httpParams); 
1

我懷疑它是那種超時您可以通過只提高限定的印象建議修復,這聽起來更像是一個網絡問題與您的設置到達服務器。

這是仿真器還是真實設備?確保你確實可以到達服務器(例如,看看在瀏覽器中輸入的內容是什麼);如果您在仿真器上嘗試連接到本地計算機,則需要使用10.0.2.2作爲IP地址(不是127.0.0.1或LAN上的IP)。如果您在物理設備上,則通常的客戶端 - 服務器網絡檢查規則適用:

  • 如果是本地開發服務器,您與服務器在同一LAN /子網上嗎?
  • 如果您試圖通過Internet從外部連接而不是從局域網連接,您確定所有正確的防火牆端口都已打開,以便從您的開發服務器發出外部請求嗎?
  • 您的服務器軟件是否設置爲接受來自外部請求的連接? (由於安全原因,一些開發服務器,如Django,默認設置爲默認只接受本地主機連接)。
+0

是的,這是不是超時的問題。我用不同的值設置了超時值,問題沒有解決。我正在使用真正的設備和我可以通過iphone使用的相同的Web服務。 – user422688 2010-11-22 17:18:46

+0

此外,它不是防火牆的問題,因爲ip是公開的,我使用數據sim來連接。此外,從Android手機上的瀏覽器,我能夠消耗它。 – user422688 2010-11-22 17:26:52