Back to project page dissertation-project.
The source code is released under:
MIT License
If you think the Android project dissertation-project listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.fyp.resilience.connection; //from w ww .jav a2 s . c om import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import android.content.Context; import android.net.Uri; import com.fyp.resilience.Constants; import com.fyp.resilience.ResilienceController; import com.fyp.resilience.database.model.DataWhole; import com.fyp.resilience.util.Utils; public class ServerDownloadConnectable extends Connectable { public ServerDownloadConnectable(final Context context, final DataWhole dataWhole) { super(context, dataWhole); mConnectionType = Connectable.CONNECTION_TYPE_SERVER_DOWNLOAD; } @Override public void run() { super.run(); mDataWhole.setState(DataWhole.STATE_DOWNLOADING); mConnectionStatus = runTask(); runPostTask(); } @Override protected int runTask() { InputStream urlStream = null; OutputStream fileStream = null; try { final URL url = new URL(Constants.WIDERST_DOWNLOAD_URL + mDataWhole.getKey()); final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(30000); conn.setConnectTimeout(15000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.connect(); final int response = conn.getResponseCode(); if (response == HttpURLConnection.HTTP_OK) { Context context = mContext.get(); if (null == context) { return Connectable.STATUS_CONNECTION_ERROR; } /* Retrieve the length of the file */ final int fileLength = conn.getContentLength(); final byte[] buffer = new byte[4096]; urlStream = conn.getInputStream(); fileStream = Utils.createFile(context, mDataWhole.getFileName(), Context.MODE_WORLD_READABLE); int length; long downloaded = 0; while ((length = urlStream.read(buffer)) != -1) { fileStream.write(buffer, 0, length); if (fileLength > 0) { downloaded += length; mProgress = (int) (((float) downloaded / fileLength) * 100); notifyOfProgressChange(); } } mDataWhole.setUriString(Uri.fromFile( Utils.getFileFromStream(context, mDataWhole.getFileName())).toString()); return Connectable.STATUS_SUCCESS; } return Connectable.STATUS_CONNECTION_ERROR; } catch (IOException io) { io.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != urlStream) { urlStream.close(); } if (null != fileStream) { fileStream.flush(); fileStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return Connectable.STATUS_CONNECTION_ERROR; } @Override protected void runPostTask() { final Context context = mContext.get(); if (null != context) { final ResilienceController controller = ResilienceController.getInstance(context); if (mConnectionStatus == Connectable.STATUS_SUCCESS) { controller.removeDataPieces(mDataWhole); mDataWhole.setAvailability(true); mDataWhole.setState(DataWhole.STATE_COMPLETED); controller.addDataWhole(mDataWhole); } else { mDataWhole.setState(DataWhole.STATE_COMPLETED); } controller.removeConnection(this); } } }