2012-12-20 8 views
1

Dans mon application, le système télécharge les images à partir d'une adresse URL et les enregistre dans la mémoire du téléphone. (Je n'ai pas inclus l'adresse URL dans la question) En plus de cela, il va également enregistrer des données dans la base de données sqlite. Les données sauvegardées sont le nom du fichier, le chemin du fichier et la taille du fichier. Mais actuellement, une fois que je passe par le processus de téléchargement si le téléchargement complet ou échouent au milieu du processus, il va également insérer dans la base de données.
Est-il possible de vérifier si le processus de téléchargement est terminé ou non?Comment vérifier si le processus de téléchargement de l'image est terminé ou non?

 GalleryScreen.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       boolean isDownloadResult = false; 


         int NumIncrease = 0; 
         Log.i(TAG, "NumberIncrease:" +NumIncrease); 
         Toast.makeText(getApplicationContext(), "Downloading.............>>>>>>>>>>>", Toast.LENGTH_SHORT).show(); 
         Bitmap bm; 
         InputStream in; 



         try{ 


          in = new java.net.URL(URL).openStream(); 
          bm = BitmapFactory.decodeStream(new PatchInputStream(in)); 

          File storage = new File(Environment.getExternalStorageDirectory() + File.separator + "/Images/"); 
          Log.i(TAG,"storage:" +storage); 
          Log.i(TAG,"storage:" +storage.getAbsolutePath()); 
          if(!storage.exists()){ 
           storage.mkdirs(); 


          } 

           String FileName = "/"+CONTENT_ID+".jpg"; 
           FileOutputStream fos = new FileOutputStream(storage + FileName); 
           bm.compress(Bitmap.CompressFormat.JPEG, 85, fos); 

           String filepath = storage + FileName; 
           File filecheck = new File (filepath); 
           long fileSize = filecheck.length(); 
           fos.flush(); 
           fos.close(); 

           Log.i(TAG, "bm:" +bm); 
           Log.i(TAG, "fos:" +fos); 
           Log.i(TAG, "filesize:" +fileSize); 
           Log.i(TAG, "filepath:" +filepath); 
           helper.insert_content(filepath, fileSize, requestTime); 


          isDownload = false; 
         } 
         catch(IOException e1){ 
           e1.printStackTrace(); 
           } 
      } 

     }); 
+0

Si vous utilisez AsyncTask alors vous pouvez vérifier que si elle est en cours d'exécution ou non – rajpara

Répondre

4

Veuillez utiliser AsyncTask. AsyncTask permet une utilisation correcte et facile du thread UI. Cette classe permet d'effectuer des opérations d'arrière-plan et de publier des résultats sur le thread d'interface utilisateur sans avoir à manipuler des threads et/ou des gestionnaires. AsyncTask est conçu pour être une classe d'aide autour de Thread and Handler et ne constitue pas un cadre de threading générique. AsyncTasks devrait idéalement être utilisé pour les opérations courtes (quelques secondes au maximum.)

Vous pouvez simplement utiliser une classe anonyme pour la tâche asynchrone. Cela voudrait ceci:

ImageView mChart = (ImageView) findViewById(R.id.imageview); 
String URL = "http://www...anything ..."; 

mChart.setTag(URL); 
new DownloadImageTask.execute(mChart); 

La classe Task:

public class DownloadImagesTask extends AsyncTask<ImageView, Void, Bitmap> { 

ImageView imageView = null; 

@Override 
protected Bitmap doInBackground(ImageView... imageViews) { 
    this.imageView = imageViews[0]; 
    return download_Image((String)imageView.getTag()); 
} 

@Override 
protected void onPostExecute(Bitmap result) { 
    imageView.setImageBitmap(result); 
} 


private Bitmap download_Image(String url) { 
    ... 
} 

Ici, onPostExecute, vous pouvez facilement vérifier si le processus de l'image de téléchargement est terminée ou non.

Pour en savoir plus

EDIT:

+0

Merci pour vos informations. Je vais essayer de regarder AsyncTask. Comme vous l'avez mentionné _AsyncTasks devrait idéalement être utilisé pour des opérations courtes (quelques secondes au maximum) _. Pour l'instant, je voulais télécharger l'image, donc je suppose que cela ne devrait pas poser de problème. Mais si plus tard, je veux mettre en œuvre la fonctionnalité de téléchargement vidéo de l'URL ainsi. AsyncTask est-il adapté à cette tâche? –

+0

@IssacZH. La plupart des bienvenus car cela vous a aidé. :) J'ai édité ma réponse comme commentaire. S'il vous plaît jeter un oeil à la partie EDIT. –

+0

Merci encore! Maintenant, je connais l'idée de progresser dans ce domaine.Votre réponse est très utile. –

Questions connexes