From 991db8d2e8952b1f2038c2fdbdb6cb6da94cb830 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Thu, 24 May 2012 21:27:42 +0300 Subject: [PATCH] [android] Improved DownloadChunk logic --- .../maps/downloader/DownloadChunkTask.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/android/src/com/mapswithme/maps/downloader/DownloadChunkTask.java b/android/src/com/mapswithme/maps/downloader/DownloadChunkTask.java index 8527743e30..fa4556fa25 100644 --- a/android/src/com/mapswithme/maps/downloader/DownloadChunkTask.java +++ b/android/src/com/mapswithme/maps/downloader/DownloadChunkTask.java @@ -10,7 +10,7 @@ import java.net.URL; import android.os.AsyncTask; import android.util.Log; -class DownloadChunkTask extends AsyncTask +class DownloadChunkTask extends AsyncTask { private static final String TAG = "DownloadChunkTask"; @@ -49,9 +49,10 @@ class DownloadChunkTask extends AsyncTask } @Override - protected void onPostExecute(Void resCode) + protected void onPostExecute(Boolean success) { - onFinish(m_httpCallbackID, 200, m_beg, m_end); + if (success) + onFinish(m_httpCallbackID, 200, m_beg, m_end); } @Override @@ -79,20 +80,18 @@ class DownloadChunkTask extends AsyncTask } @Override - protected Void doInBackground(Void... p) + protected Boolean doInBackground(Void... p) { URL url; + HttpURLConnection urlConnection = null; try { url = new URL(m_url); - HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection = (HttpURLConnection) url.openConnection(); if (isCancelled()) - { - urlConnection.disconnect(); - return null; - } + return false; urlConnection.setUseCaches(false); urlConnection.setConnectTimeout(15 * 1000); @@ -121,10 +120,7 @@ class DownloadChunkTask extends AsyncTask } if (isCancelled()) - { - urlConnection.disconnect(); - return null; - } + return false; final int err = urlConnection.getResponseCode(); if (err != HttpURLConnection.HTTP_OK && err != HttpURLConnection.HTTP_PARTIAL) @@ -132,8 +128,7 @@ class DownloadChunkTask extends AsyncTask // we've set error code so client should be notified about the error m_httpErrorCode = err; cancel(false); - urlConnection.disconnect(); - return null; + return false; } final InputStream is = urlConnection.getInputStream(); @@ -143,10 +138,7 @@ class DownloadChunkTask extends AsyncTask while ((readBytes = is.read(tempBuf)) != -1) { if (isCancelled()) - { - urlConnection.disconnect(); - return null; - } + return false; byte [] chunk = new byte[(int)readBytes]; System.arraycopy(tempBuf, 0, chunk, 0, (int)readBytes); @@ -167,7 +159,12 @@ class DownloadChunkTask extends AsyncTask m_httpErrorCode = IO_ERROR; cancel(false); } + finally + { + if (urlConnection != null) + urlConnection.disconnect(); + } - return null; + return true; } }