2012-01-16 5 views
1

J'ai donc une activité avec un ImageView. Mon but est de démarrer l'activité et de récupérer de manière asynchrone l'image dont j'ai besoin. Pendant que l'image est récupérée, j'aimerais afficher une sorte de symbole de chargement tournant à la place de l'image. J'ai essayé d'utiliser AsyncTask comme une classe distincte, mais j'ai rencontré des problèmes liés à la modification des vues d'une autre activité. J'ai essayé une classe Runnable anonyme à l'intérieur de l'activité, mais elle ne semble pas produire les effets escomptés. Quelqu'un peut-il conseiller?Chargement de l'image asynchrone Android

SOLVED: simplement besoin d'un gestionnaire dans l'activité

final Handler handler = new Handler() { 
      public void handleMessage(Message msg) { 
       ImageView qrCode = (ImageView)findViewById(R.id.qr); 
       qrCode.setImageBitmap((Bitmap)msg.obj); 
      } 
    }; 


    new Thread(new Runnable(){ 

      public void run() { 
       BitmapFactory.Options bmOptions; 
       bmOptions = new BitmapFactory.Options(); 
       bmOptions.inSampleSize = 1; 
       int retry = 0; 
       Bitmap bm = null; 
       while(retry < 50 && bm == null){ 
        bm = LoadImage(image_URL, bmOptions); 
        if(bm == null){ 
         try { 
          Thread.sleep(100); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
        retry++; 
       } 
       Message msg = new Message(); 
       msg.obj = bm; 
       handler.sendMessage(msg); 
       return; 
      } 


    }).start(); 
    ` 
+0

Pouvez-vous poster votre solution comme une réponse ci-dessous afin que nous puissions obtenir ce hors de la liste sans réponse? Merci. –

Répondre

0

Placez un dialogue de progression à l'intérieur de la vue avec le imageview. définir l'imageview ImageView.visibility (View.INVISIBLE);

Dans votre preExecute() dans votre AsyncTask

Afficher la boîte de dialogue de rotation, puis faire le fetching dans le doInBackground() du AsyncTask

En onPostExecute() montrer votre imageview en changeant la visibilité et fermer la boîte de dialogue ou définir sa visibilité sur View.GONE

+0

Le fait de ne pas modifier ImageView (définition du bitmap) appartenant à l'activité dans une classe AsyncTask distincte fait-il apparaître l'erreur que j'ai décrite? – Realn0whereman

+0

Peu importe, j'avais simplement besoin d'un gestionnaire. – Realn0whereman

0

Le guide de développement Android pour le threading devrait vous aider. Il a des exemples AsyncTask que à peu près exactement ce que vous vous demandez: Android Threading Guide

Si vous ne mettez pas en œuvre la méthode publishProgress(), et que la mise en œuvre doInBackground pour obtenir les données et onPostExecute de mettre à jour l'interface utilisateur, alors il devrait par défaut vous donner l'icône de rotation pour indiquer qu'il charge. Gardez à l'esprit que onPostExecute fonctionne sur le thread principal de l'interface utilisateur de sorte que vous ne pouvez pas faire des appels de réseau à partir de là

Questions connexes