Мой Android-мобильный Java-код отправляет запись транзакции в облако через Http. Я читаю Http Response и принимаю дальнейшие меры в соответствии с ответом. Работало нормально, но вдруг из-за этой строки приложение начало зависать и перестало работать:
responseInputStream = new BufferedInputStream (httpURLConnection.getInputStream ());
А позже вечером он снова начал работать. Итак, я думаю, что была какая-то проблема на сервере. Но я хочу убедиться, что если это произойдет снова, мое приложение не должно зависать. Я делаю вызов Http и читаю ответ в блоке try / catch и обрабатываю все исключения, я также включил исключение, чтобы ничего не пропустить. Но приложение все еще висело. Кто-нибудь может подсказать, как лучше реагировать на чтение?
Публикация всего кода функции.
Спасибо.
private void WebServiceConnection (String xmlString, String empid, String punchdate) {
Log.e(TAG, "Inside webservice connection");
InputStream responseInputStream = null;
OutputStream requestOutputStream = null;
HttpURLConnection httpURLConnection = null;
try {
//Server URL
URL url = new URL("http://xyz:8084/RTTS/TransData");
// Set the HTTP URL connection
httpURLConnection = (HttpURLConnection)url.openConnection();
Log.e(TAG, "http connection opened");
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setConnectTimeout(15000);
httpURLConnection.setRequestProperty("Accept-Charset", "UTF-8");
httpURLConnection.setRequestProperty("Content-Type", "text/xml");
Log.e(TAG, "Send request");
// Send request
requestOutputStream = httpURLConnection.getOutputStream();
requestOutputStream.write(xmlString.getBytes("UTF-8"));
Log.e(TAG, "after send request");
/* String body = xmlString;
OutputStream output = new BufferedOutputStream(httpURLConnection.getOutputStream());
output.write(body.getBytes());
output.flush();
*/
//Receive response
responseInputStream = new BufferedInputStream(httpURLConnection.getInputStream());
// responseInputStream = null;
if(responseInputStream !=null) {
Log.e("PushDataService", responseInputStream.toString());
//Delete from Local
PunchResponse punchResponse = new PunchResponse();
ParseResponse parseResponse = new ParseResponse();
punchResponse = parseResponse.getResponse(responseInputStream);
Log.e("PushDataService", "Deleting record. Emp id: " + punchResponse.empid);
if (punchResponse != null && punchResponse.empid != null) {
Log.e("PushDataService", "Inside if response not null");
deleteRecordLocal(punchResponse);
} else {
Log.e(TAG, "Null response from Web Service. REcord not found to delete");
}
}else {
Log.e(TAG, "Null response returned from Web server");
}
}
catch (UnknownHostException e) {
e.printStackTrace();
}
catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch(SocketTimeoutException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
finally {
if(httpURLConnection != null) {
httpURLConnection.disconnect();
}
//close input
if (responseInputStream != null) {
try {
responseInputStream.close();
} catch (IOException ioex) {
ioex.printStackTrace();
}
}
//Close output
if (requestOutputStream != null) {
try {
requestOutputStream.close();
} catch (IOException ioex) {
ioex.printStackTrace();
}
}
}
}