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 :

Problème d'adaptation avec la classe Bitmap


Sujet :

Android

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Par défaut Problème d'adaptation avec la classe Bitmap
    Bonjour à tous, je récupère des données grâce à un parser XML qui utilise la méthode SAX. J'ai utiliser ce tutoriel (http://thibault-koprowski.fr/2010/10...-sous-android/

    la fonction getThumb me renvoie l'adresse url de l'image de chaque article et j'aimerais l'afficher dans un ImageView mais je n'arrive pas à l'adapter dans mon ADAPTER et c'est pour cela que je fais appel à vous !!! Merci de votre aide



    Voici mon adapter :

    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
     
    package com.rssreader;
     
    import java.util.ArrayList;
     
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
     
    public class ListFeedAdapter extends BaseAdapter {
     
    	// les données à afficher
    	private ArrayList<Feed> feeds;
     
    	// * Le LayoutInflater permet de parser un layout XML et de 
    	// * te transcoder en IHM Android. Pour respecter l'interface 
    	// * BaseAdapter 
     
    	private LayoutInflater inflater;
     
    	public ListFeedAdapter(Context context,ArrayList<Feed> feeds) {
    		inflater = LayoutInflater.from(context);
    		this.feeds = feeds;
     
    	}
     
    	// * il nous faut spécifier la méthode "count()". 
    	// * Cette méthode permet de connaître le nombre d'items présent 
    	// * dans la liste. Dans notre cas, il faut donc renvoyer le nombre
    	// * de personnes contenus dans "mListP".
     
    	public int getCount() {
    		return feeds.size();
    	}
     
     
    	 // Permet de retourner un objet contenu dans la liste
     
    	public Object getItem(int index) {
    		return feeds.get(index);
    	}
     
    	public long getItemId(int index) {
    		return this.feeds.get(index).getId();
     
    	}
     
     
    	 // * Voici la partie la plus complexe de la classe
     
    	public View getView(int position, View convertView, ViewGroup parent){
    		// * Le paramètre "convertView" permet de recycler les élements 
    		// * de notre liste. En effet, l'opération pour convertir un layout 
    		// * XML en IHM standard est très couteuse pour la plateforme Android. 
    		// * On nous propose ici de réutiliser des occurences créées qui ne sont 
    		// * plus affichées. Donc si ce paramètre est "null" alors, il faut "inflater" 
    		// * notre layout XML, sinon on le réutilise
    		FeedView fv;		
     
    		if (convertView == null) {
    			fv = new FeedView();
    			convertView = inflater.inflate(R.layout.feed_view, null);
     
    			fv.thumb = (TextView)convertView.findViewById(R.id.thumb);			
    			fv.title = (TextView)convertView.findViewById(R.id.title);
    			fv.pubDate = (TextView)convertView.findViewById(R.id.pub_date);
    			convertView.setTag(fv);
     
    		} else {
    			fv = (FeedView) convertView.getTag();
    		}						
    		fv.thumb.setText(feeds.get(position).getThumb());
    		fv.pubDate.setText(feeds.get(position).getPubDate());
    		fv.title.setText(feeds.get(position).getTitle());
    		return convertView;
    	}
     
    }

    Et voici un moyen d'afficher l'image grâce à la classe Bitmap

    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
     
    package com.img;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
     
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.widget.ImageView;
     
    public class ImageTestActivity extends Activity {
     
    String image_URL=
     "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
     
       /** Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
     
           ImageView bmImage = (ImageView)findViewById(R.id.img);
        BitmapFactory.Options bmOptions;
        bmOptions = new BitmapFactory.Options();
        bmOptions.inSampleSize = 1;
        Bitmap bm = LoadImage(image_URL, bmOptions);
        bmImage.setImageBitmap(bm);
       }
     
       private Bitmap LoadImage(String URL, BitmapFactory.Options options)
       {       
        Bitmap bitmap = null;
        InputStream in = null;       
           try {
               in = OpenHttpConnection(URL);
               bitmap = BitmapFactory.decodeStream(in, null, options);
               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;
    }
    }

  2. #2
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Par défaut
    Je n'ai pas regardé l'activité, mais dans l'adapter il y a déjà des problèmes

    Il faut que tu te débrouilles pour te retrouver avec quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public View getView(int position, View convertView, ViewGroup parent){
     
    	FeedView fv;		
     
    	if (convertView == null) {
    		fv = (FeedView) inflater.inflate(R.layout.feed_view, null);
     
    	} else {
    		fv = (FeedView) convertView;
    	}				
     
    	fv.setFeed(feed);
    	return fv;
    }
    C'est plus propre non ?

  3. #3
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    URL ulrn = new URL(feeds.get(position).getThumb());
    final URLConnection conn = ulrn .openConnection();
    conn.connect();
    final BufferedInputStream is = new BufferedInputStream(conn.getInputStream());
    final Bitmap bitmap = BitmapFactory.decodeStream(is);
    if (null != bmp)
            TonImageBView.setImageBitmap(bitmap );
     
    is.close();

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Par défaut
    J'ai adapter mon code avec ce qur vous m'avez proposer, mais j'ai une erreur à la ligne qui est en gras :

    bmp cannot be resolved to a variable
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    package com.chants;
    
    import java.io.BufferedInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class ListFeedAdapter extends BaseAdapter {
    
    	// les données à afficher
    	private ArrayList<Feed> feeds;
    	
    	// * Le LayoutInflater permet de parser un layout XML et de 
    	// * te transcoder en IHM Android. Pour respecter l'interface 
    	// * BaseAdapter 
    	 
    	private LayoutInflater inflater;
    	
    	public ListFeedAdapter(Context context,ArrayList<Feed> feeds) {
    		inflater = LayoutInflater.from(context);
    		this.feeds = feeds;
    		
    	}
    	
    	// * il nous faut spécifier la méthode "count()". 
    	// * Cette méthode permet de connaître le nombre d'items présent 
    	// * dans la liste. Dans notre cas, il faut donc renvoyer le nombre
    	// * de personnes contenus dans "mListP".
    	
    	public int getCount() {
    		return feeds.size();
    	}
    
    	
    	 // Permet de retourner un objet contenu dans la liste
    	
    	public Object getItem(int index) {
    		return feeds.get(index);
    	}
    
    	public long getItemId(int index) {
    		return this.feeds.get(index).getId();
    		
    	}
    
    	
    	 // * Voici la partie la plus complexe de la classe
    	
    	public View getView(int position, View convertView, ViewGroup parent){
    		FeedView fv;		
    			if (convertView == null) {
    			fv = new FeedView();
    			convertView = inflater.inflate(R.layout.feed_view, null);
    			fv.thumb = (ImageView)convertView.findViewById(R.id.thumb);
    			fv.title = (TextView)convertView.findViewById(R.id.title);
    			fv.pubDate = (TextView)convertView.findViewById(R.id.pub_date);
    			fv.extrait = (TextView)convertView.findViewById(R.id.extrait);
    			convertView.setTag(fv);
    
    			} 
    			
    			else 
    			{
    			fv = (FeedView) convertView.getTag();
    			}
    
    			fv.pubDate.setText(feeds.get(position).getPubDate());
    			fv.title.setText(feeds.get(position).getTitle());
    			fv.extrait.setText(feeds.get(position).getExtrait());
    			
    			URL ulrn = new URL(feeds.get(position).getThumb());
    			final URLConnection conn = ulrn .openConnection();
    			conn.connect();
    			final BufferedInputStream is = new BufferedInputStream(conn.getInputStream());
    			final Bitmap bitmap = BitmapFactory.decodeStream(is);
    			if (null != bmp)
    			fv.thumb.setImageBitmap(bitmap );
    			is.close();
    			return convertView;
    			}
    
    			
    }

  5. #5
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    bmp cannot be resolved to a variable
    je suis aller trop vite .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    URL ulrn = new URL(feeds.get(position).getThumb());
    final URLConnection conn = ulrn .openConnection();
    conn.connect();
    final BufferedInputStream is = new BufferedInputStream(conn.getInputStream());
    final Bitmap bitmap = BitmapFactory.decodeStream(is);
    if (null != bitmap)
            TonImageBView.setImageBitmap(bitmap );
     
    is.close();
    Ce n'est pas bmp mais bitmap .

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Par défaut
    Bonjour, le code fonctionne très bien sur mon emulateur sous Eclipse. Mais lorsque je le teste sur mon téléphone Android, les images ne s'affiche pas.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Par défaut
    moi non plus je n'est toujours pas reussi a adapter des images a tu reussi?

  8. #8
    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
    Citation Envoyé par anto2b Voir le message
    Bonjour, le code fonctionne très bien sur mon emulateur sous Eclipse. Mais lorsque je le teste sur mon téléphone Android, les images ne s'affiche pas.
    Et il dit quoi le LogCat du téléphone ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/07/2008, 23h03
  2. Problème de multimap avec des classes dérivées
    Par Bob94 dans le forum SL & STL
    Réponses: 3
    Dernier message: 06/05/2008, 02h02
  3. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 10h37
  4. Problème balise iterate avec la classe HashSet
    Par kokumbo dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/11/2007, 15h43
  5. Réponses: 8
    Dernier message: 16/10/2006, 12h28

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