IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Déclenchement de Handler


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Par défaut Déclenchement de Handler
    Bonjour Messieurs,

    Je suis actuellement confronté a un problème dans le développement d'application android, le but de mon application est de parser un flux RSS et d'afficher les images contenue dans ce flux, j'aimerais comprendre le principe des HANDLER car même en lisant pas mal d'article pour moi ca reste flou.

    Malheureusement mon image ne change pas ni aurait-il pas un moyen de changer l'image après un certain temps ?

    Je n'arrive pas à trouvé l'algorithme. et je me demande comment faire. Ci dessous mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    public class DisplayImg extends Activity {
    	private Handler mHandler;
    	long start = 1;
    	private int cmp = 0;
    	private List<Long> idss = new ArrayList<Long>();
    	private List<Integer> durations = new ArrayList<Integer>();
    	private ArrayList<FeedForDisplay> feeds;
    	private Bitmap bitmap;
    	private int duration;
    	private List<String> imageUris = new ArrayList<String>();
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.listsetting);
    		Intent thisIntent = getIntent();
     
    		String url = thisIntent.getExtras().getString("url");
    		mHandler = new Handler();
    		feeds = ContainerDataDisplay.getFeeds(url);
    		if (feeds != null) {
    			for (FeedForDisplay feed : feeds) {
    				// listIdfeed.add(feed.getId());
    				// Log.i("ImageTitle", feed.getDescription());
    				// Log.i("EnclosureImageURI", feed.getEnclosureImageURI());
    				// DownloadImage(feed.getEnclosureImageURI(), feed.getId());
    				duration = feed.getDuration();
    				Log.i("id",String.valueOf( feed.getId()));
    				imageUris.add(feed.getEnclosureImageURI());
     
    			}
     
    			mHandler.removeCallbacks(mUpdateTimeTask);
    			mHandler.postDelayed(mUpdateTimeTask, 100);
    		}
    	}
     
     
     
    	private Bitmap LoadImage(String URL) {
    		Bitmap bitmap = null;
    		InputStream in = null;
    		try {
    			in = OpenHttpConnection(URL);
    			bitmap = BitmapFactory.decodeStream(in);
    			in.close();
    		} catch (IOException e1) {
    		}
    		return bitmap;
    	}
     
    	private InputStream OpenHttpConnection(String strURL) throws IOException {
    		InputStream inputStream = null;
    		URL url = new URL(strURL);
    		URLConnection conn = url.openConnection();
     
    		try {
    			HttpURLConnection httpConn = (HttpURLConnection) conn;
    			httpConn.setRequestMethod("GET");
    			httpConn.connect();
     
    			if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    				inputStream = httpConn.getInputStream();
    			}
    		} catch (Exception ex) {
    		}
    		return inputStream;
    	}
     
    	private Runnable mUpdateTimeTask = new Runnable() {
    		public void run() {
     
     
     
    			for (String ig : imageUris) {
    				Log.i("test", ig.toString() );
    				bitmap = LoadImage(ig);
     
    				ImageView img = (ImageView) findViewById(R.id.img);
    				img.setImageBitmap(bitmap);
    			}
    				mHandler.postDelayed(mUpdateTimeTask, duration * 1000);
     
    		}
     
    	};
    }


    Si quelqu'un à la gentillesse de m'éclairer un peu sur ce sujet, car il reste très flou pour moi.
    Cordialement

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Un handler permet de gérer des messages dans le thread qui l'a créé (en l'occurence le thread principal, seul à pouvoir updater les widgets)

    Dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Handler handler;
    ArrayList<String> imageUris; 
     
    pubic onCreate(..)
    {
         this.handler = new Handler();
         // imageUris feeding
         startDownloadImages();
    }
     
    public startDownloadImages()
    {
        new Thread(new Runnable() {
           public void run() {
               for (String uri : Activity.this.imageUris) {
                    int resId = ???
                    Bitmap b = downloadImage(uri);
                    // le SetImageTask sera executé dans le thread du handler (donc de l'UI).
                    Activity.this.handler.postExecute(new SetImageTask(resId,b));
               }
           }
        }
    }
     
    public class SetImageTask implements Runnable
    {
        int id;
        Drawable drawable ;
        public SetImageTask(int resId, Drawable draw)
        {
           this.drawable = draw;
           this.id = resId;
        }
        public void run()
        {
            ImageView v = (ImageView) Actvitiy.this.findViewById(this.id);
            v.setImageDrawable(this.drawable);
        }
    }
    Maintenant, il y a aussi AsyncTask... bien plus "joli" dans le sens ou elle s'occupe de tout ce qui est handler/error/cancel...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    ArrayList<String> imageUris; 
     
    pubic onCreate(..)
    {
         this.handler = new Handler();
         // imageUris feeding
         (new DownloadImageTask()).execute();
    }
     
    public void setUriBitmaps(List<Bitmap> bitmaps)
    {
         for (Bitmap b : bitmaps) {
              int resId = ...
              ImageView v = (ImageView) findViewById(this.id);
              v.setImageBitmap(b);
         }
    }
     
     
    public class DownloadImagesTask extends AsyncTask<Void,List<Bitmap>,Void>
    {
         // executed in separate thread
         public List<Bitmap> doInBackground()
         {
               ArrayList<Bitmap> ret = new ArrayList<Bitmap>();
               for (String uri : Activity.this.imageUris) {
                    Bitmap b = downloadImage(uri);
                    ret.add(b);
               }
         }
         // executed in UI thread... 
         public void postExecute(List<Bitmap> bitmaps)
         {
              Activity.this.setUriBitmaps(bitmaps);
          }
    }

Discussions similaires

  1. Déclenchement sur select
    Par sdinot dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 02/04/2004, 11h52
  2. 1er déclenchement d'un trigger d'auto-incrément
    Par babylone7 dans le forum Administration
    Réponses: 11
    Dernier message: 11/03/2004, 16h21
  3. [C#] suppression handler sur ImageButton
    Par jld33 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/01/2004, 09h50
  4. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo