Translate

jeudi 25 juillet 2013

Download File

Dans ce tutoriel nous allons voir comment télécharger un document à partir de son url.
Le téléchargement doit se dérouler en arrière plan afin de ne pas bloquer l'application. Il est également utile de suivre l'évolution du téléchargement, et nous aurons aussi besoin de d'informer l'utilisateur que le téléchargement est terminé. C'est pour cela que nous utiliserons AsyncTask avec ces méthodes doInBackground, onProgressUpdate et onPostExecute .
L'information sur l'évolution du téléchargement sera affichée au niveau d'une Notification.


Pour télécharger le document :

String url = "URL du document à télécharger ou du WebService de téléchargement";
HttpGet httpget = new HttpGet(URIUtil.encodeQuery(url));
HttpResponse response;
DefaultHttpClient httpclient = new DefaultHttpClient();
response = httpclient.execute(httpget);
if (response.getStatusLine().getStatusCode() != 200) {
       throw new IOException();
}
HttpEntity entity = response.getEntity();
OutputStream output = new FileOutputStream(chemin du document à écrire);
Int count = -1;
while ((count = input.read(data)) != -1) {
       output.write(data, 0, count);
}
output.flush();
output.close();

input.close();

Pour les notifications, l'utilisation de AsyncTask consultez le projet suivant : https://github.com/DroiDev/DownloadDocument

Afficher une image à partir de son URL

Pour afficher une image dans un ImageView directement à partir de son URL nous écrirons une AsyncTask qui téléchargera l'image en arrière plan (ne bloque pas l'application). Une c'est fait cette AsyncTask affichera l'image à l'écran.

AsyncTask
public class ImagePreview extends AsyncTask<String, Integer, Object> {

       public ImagePreview() {
             super();
       }

       @Override
       protected final Bitmap doInBackground(final String... url) {
             Bitmap bitmap = null;
             try {
                    bitmap = BitmapFactory.decodeStream((InputStream) new URL(
                                        url[0]).getContent());
             } catch (MalformedURLException e) {
                    e.printStackTrace();
             } catch (IOException e) {
                    e.printStackTrace();
             }
             return bitmap;
       }

       @Override
       protected final void onPostExecute(final Object result) {
             super.onPostExecute(result);
             ImageView photo = (ImageView) findViewById(R.id.image_preview);
             if (result != null)
                    photo.setImageBitmap((Bitmap) result);
             else
                    Toast.makeText(getApplicationContext(), R.string.download_fail,
                                        Toast.LENGTH_LONG).show();
       }

}

Il ne reste plus qu'à appeler cette AsyncTask avec l'url de l'image
ImagePreview d = new ImagePreview();
d.execute(url de l'image à afficher);

Un exemple est disponible : https://github.com/DroiDev/DownloadDocument