Eu uso a nova estrutura do Volley para Android para fazer uma solicitação ao meu servidor. Mas atinge o tempo limite antes de obter a resposta, embora responda.
Eu tentei adicionar este código:
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);
no HttpClientStack
do quadro Volley para um inteiro diferente (50000), mas ainda vezes antes de 50 segundos.
Existe uma maneira de alterar o tempo limite para um valor longo?
android
timeout
android-volley
Cissmayazz
fonte
fonte
HttpClient
classe.Respostas:
Veja
Request.setRetryPolicy()
e o construtor paraDefaultRetryPolicy
, por exemplofonte
Para lidar com o Android Volley Timeout, você precisa usar
RetryPolicy
RetryPolicy
RetryPolicy
é uma interface em que você precisa implementar sua lógica de como deseja repetir uma solicitação específica quando ocorrer um tempo limite.Ele lida com esses três parâmetros
Por ex. Se RetryPolicy for criado com esses valores
Tente novamente a tentativa 1:
Tente novamente a tentativa 2:
Portanto, no final da Tentativa de Repetição 2, se o Tempo Limite do Soquete ainda ocorrer, o Volley lançaria um
TimeoutError
no seu manipulador de resposta de Erro de UI.fonte
RetryPolicy
implementação realmente faz.new DefaultRetryPolicy(
e certifique-se de nunca reutilizar umRetryPolicy
objeto, pois o objeto é referenciado por todo o processo de solicitação, e os incrementos de nova tentativa são adicionados sobre o mesmo valor de tempo limite do objeto, fazendo com que seus futuros tempos limite de solicitação cresçam infinitamenteApenas para contribuir com a minha abordagem. Como já respondido,
RetryPolicy
é o caminho a percorrer. Mas se você precisar de uma política diferente do padrão para todas as suas solicitações, poderá defini-la em uma classe Request básica, para que não precise definir a política para todas as instâncias de suas solicitações.Algo assim:
No meu caso, eu tenho um GsonRequest que se estende a partir deste BaseRequest, portanto não corro o risco de esquecer de definir a política para uma solicitação específica e você ainda pode substituí-la se alguma solicitação específica exigir.
fonte
fonte
Você pode definir
MY_SOCKET_TIMEOUT_MS
como 100. O que você deseja definir é em milissegundos.DEFAULT_MAX_RETRIES
pode ser 0 o padrão é 1.fonte
fonte
Outra maneira de fazer isso é no JsonObjectRequest personalizado por:
Fonte: Exemplo do Android Volley
fonte
Solução alternativa se todas as soluções acima não estiverem funcionando para você
Por padrão, o Volley define o tempo limite igualmente para ambos
setConnectionTimeout()
esetReadTimeout()
com o valor deRetryPolicy
. No meu caso,Volley
lança exceção de tempo limite para grandes blocos de dados, consulte:Minha solução é criar uma classe que se estende
HttpStack
à minha própriasetReadTimeout()
política. Em seguida, use-o quando criar daRequestQueue
seguinte maneira:fonte
Acabei adicionando um método
setCurrentTimeout(int timeout)
aoRetryPolicy
e sua implementação noDefaultRetryPolicy
.Em seguida, adicionei um
setCurrentTimeout(int timeout)
na classe Request e o chamei.Isso parece fazer o trabalho.
Desculpem a minha preguiça, a propósito e viva o código aberto.
fonte