Eu criei a seguinte função para verificar o status da conexão:
private void checkConnectionStatus() {
HttpClient httpClient = new DefaultHttpClient();
try {
String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/"
+ strSessionString + "/ConnectionStatus";
Log.d("phobos", "performing get " + url);
HttpGet method = new HttpGet(new URI(url));
HttpResponse response = httpClient.execute(method);
if (response != null) {
String result = getResponse(response.getEntity());
...
Quando eu desligo o servidor para testar, a execução aguarda muito tempo na linha
HttpResponse response = httpClient.execute(method);
Alguém sabe como definir o tempo limite para evitar a espera por muito tempo?
Obrigado!
java
android
timeout
httpresponse
Niko Gamulin
fonte
fonte
Para definir configurações no cliente:
Eu usei isso com sucesso no JellyBean, mas também deve funcionar para plataformas mais antigas ....
HTH
fonte
Se você estiver usando a biblioteca cliente http de Jacarta, poderá fazer algo como:
fonte
Se você estiver usando o cliente http padrão, veja como fazê-lo usando os parâmetros HTTP padrão:
O crédito original está disponível em http://www.jayway.com/2009/03/17/configuring-timeout-with-apache-httpclient-40/
fonte
Para aqueles que dizem que a resposta de @ kuester2000 não funciona, lembre-se de que as solicitações HTTP, primeiro tente encontrar o IP do host com uma solicitação DNS e, em seguida, faça a solicitação HTTP real para o servidor, portanto, você também pode precisar definir um tempo limite para a solicitação de DNS.
Se seu código funcionou sem o tempo limite para a solicitação de DNS, é porque você pode acessar um servidor DNS ou está atingindo o cache DNS do Android. A propósito, você pode limpar esse cache reiniciando o dispositivo.
Este código estende a resposta original para incluir uma pesquisa DNS manual com um tempo limite personalizado:
Método usado:
Esta classe é desta postagem do blog . Vá e verifique as observações se você vai usá-lo.
fonte
fonte
você pode criar uma instância HttpClient a propósito com Httpclient-android-4.3.5, ele pode funcionar bem.
fonte
Uma opção é usar o cliente OkHttp , da Square.
Adicione a dependência da biblioteca
No build.gradle, inclua esta linha:
Onde
x.x.x
está a versão da biblioteca desejada.Defina o cliente
Por exemplo, se você deseja definir um tempo limite de 60 segundos, faça o seguinte:
ps: Se sua minSdkVersion for maior que 8, você poderá usar
TimeUnit.MINUTES
. Então, você pode simplesmente usar:Para mais detalhes sobre as unidades, consulte TimeUnit .
fonte
Se você estiver usando o
HttpURLConnection
, chamesetConnectTimeout()
como descrito aqui :fonte
fonte