package com.android.iliConnect.dataproviders; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.HttpHostConnectException; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.protocol.HTTP; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import com.android.iliConnect.MainActivity; import com.android.iliConnect.MessageBuilder; import com.android.iliConnect.ssl.HttpsClient; public class FileDownloadProvider extends AsyncTask<String, Integer, Exception> { ProgressDialog progressDialog = null; private Activity instance = null; public boolean isRunning = false; public FileDownloadProvider(ProgressDialog progressDialog, Activity instance) { this.progressDialog = progressDialog; this.instance = instance; } public FileDownloadProvider(Activity instance) { this.instance = instance; } public FileDownloadProvider() { } @Override protected Exception doInBackground(String... sUrl) { try { String url = sUrl[0]; String filePath = sUrl[1]; // Creating HTTP client HttpParams params = new BasicHttpParams(); // Timeout für Verbindungsaufbau definieren HttpConnectionParams.setConnectionTimeout(params, 5000); HttpClient httpClient = new DefaultHttpClient(params); // mache aus http einen httpsClient HttpClient httpsClient = HttpsClient.createHttpsClient(httpClient); // erst Post gegenüber Login durchführen HttpPost post = new HttpPost(MainActivity.instance.localDataProvider.auth.url_src + "login.php"); List<NameValuePair> postFields = new ArrayList<NameValuePair>(2); // Set the post fields postFields.add(new BasicNameValuePair("username", MainActivity.instance.localDataProvider.auth.user_id)); postFields.add(new BasicNameValuePair("password", MainActivity.instance.localDataProvider.auth.password)); post.setEntity(new UrlEncodedFormEntity(postFields, HTTP.UTF_8)); HttpResponse response = null; response = httpsClient.execute(post); StatusLine status = response.getStatusLine(); if(status.getStatusCode() < 200 || status.getStatusCode() > 207) { throw new HttpException(status.getReasonPhrase()); } // als zweites Datei per Get laden HttpGet get = new HttpGet(url); response = httpsClient.execute(get); HttpEntity entity = response.getEntity(); if(status.getStatusCode() < 200 || status.getStatusCode() > 207) { throw new HttpException(status.getReasonPhrase()); } InputStream in = entity.getContent(); File file = new File(filePath); if (!file.exists()) { file.createNewFile(); } FileOutputStream fos = new FileOutputStream(file); byte data[] = new byte[1024]; long total = 0; int count; while ((count = in.read(data)) != -1) { total += count; fos.write(data, 0, count); } fos.flush(); fos.close(); in.close(); } catch (IOException e) { return e; } catch (HttpException e) { return e; } return null; } @Override protected void onPostExecute(Exception e) { //super.onPostExecute(e); if (progressDialog != null) { progressDialog.dismiss(); } if(e != null) { String errMsg = null; if(e instanceof HttpHostConnectException || e instanceof ConnectTimeoutException) { errMsg = "Es konnte keine Verbindung hergestellt werden."; } else if(e instanceof IOException) { errMsg = "Datei konnte nicht gespeichert werden."; } else { errMsg = "Es ist ein Fehler während des Downloads aufgetreten."; } if(instance != null) { MessageBuilder.exception_message(instance, errMsg); } } isRunning = false; synchronized (MainActivity.syncObject) { MainActivity.syncObject.notifyAll(); } } @Override protected void onPreExecute() { isRunning = true; if (progressDialog != null) { progressDialog.show(); } super.onPreExecute(); } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); if (progressDialog != null) { progressDialog.setProgress(progress[0]); } } }