Estou desenvolvendo um app que conecta em um WebService(TOMCAT) para baixar um JSON. Quando a conexão acontece em menos de 60 segundos o arquivo é baixado e atualizo o app, porém quando a conexão demora mais de 60 segundos para responder o app “congela” e preciso forçar seu encerramento. Esta é a rotina que utilizo para conexão com o WS:
try {
url = new URL(strings[0]);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(20000);
conn.setConnectTimeout(10000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
tamanhoarquivo = Integer.valueOf(conn.getHeaderField("Tamanho"));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
int total = 0;
while ((line = bufferedReader.readLine()) != null) {
content.append(line + "\n");
total = +line.length();
if (tamanhoarquivo > 0) {
publishProgress((int) (total * 100 / tamanhoarquivo));
}
}
bufferedReader.close();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "Erro:" + e;
} catch (MalformedURLException e) {
// Eh bom tratar as exceptions :D
e.printStackTrace();
return "Erro:" + e;
} catch (ProtocolException e) {
e.printStackTrace();
return "Erro:" + e;
} catch (IOException e) {
e.printStackTrace();
return "Erro:" + e;
} finally {
if (conn != null) {
conn.disconnect();
}
Debugando o app o responseCode recebe o valor de -1. Quando a atualização é completa recebo 11 mil registros(não funciona), porém quando a atualização é parcial recebo uma quantidade menor de registros(funciona). A rotina de conexão acima acontece dentro de uma classe AsyncTask.