Android while getting HTTP response to file how to know it wasn't fully loaded?
- by Stan
I'm using this approach to store a big-sized response from server to parse it later:
final HttpClient client = new DefaultHttpClient(new BasicHttpParams());
final HttpGet mHttpGetRequest = new HttpGet(strUrl);
mHttpGetRequest.setHeader("Content-Type", "application/x-www-form-urlencoded");
FileOutputStream fos = null;
try {
final HttpResponse response = client.execute(mHttpGetRequest);
final StatusLine statusLine = response.getStatusLine();
lastHttpErrorCode = statusLine.getStatusCode();
lastHttpErrorMsg = statusLine.getReasonPhrase();
if (lastHttpErrorCode == 200) {
HttpEntity entity = response.getEntity();
fos = new FileOutputStream(reponseFile);
entity.writeTo(fos);
entity.consumeContent();
fos.flush();
}
} catch (ClientProtocolException e) {
e.printStackTrace();
lastHttpErrorMsg = e.toString();
return null;
}
catch (final ParseException e) {
e.printStackTrace();
lastHttpErrorMsg = e.toString();
return null;
}
catch (final UnknownHostException e) {
e.printStackTrace();
lastHttpErrorMsg = e.toString();
return null;
}
catch (IOException e) {
e.printStackTrace();
lastHttpErrorMsg = e.toString();
} finally{
if (fos!=null)
try{
fos.close();
} catch (IOException e){}
}
now how could I ensure the response was completely received and thus saved to file? Assume client's device lost Internet connection while this code was running. So the app received only some part of real response. And I'm pretty sure it happens cuz I got parsing exceptions like "tag not closed", "unexpected end of file" etc. So I need to detect somehow this situation to prevent code from parsing partial response but can't see how. Is it possible at all and how to do it? Or has it has to raise IOException in such cases?