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 :

Passage d'un SimpleAdapter à un ArrayAdapter


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 37
    Points
    37
    Par défaut Passage d'un SimpleAdapter à un ArrayAdapter
    Salut à tous j'ai trouvé 2 Tuto qui peuvent m'aider à afficher des données d'une base MySql dans un ListView.
    Le 1er utilise un SimpleAdapter et récupére les données d'une base distante avec JSON
    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
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
     
     
            JSONObject json = JSONfunctions.getJSONfromURL("http://192.168.1.66/android_connect/get_all_products.php");
     
            try{
     
            	JSONArray  products = json.getJSONArray("products");
     
    	        for(int i=0;i<products.length();i++){						
    				HashMap<String, String> map = new HashMap<String, String>();	
    				JSONObject e = products.getJSONObject(i);
     
    				map.put("id",  String.valueOf(i));
    	        	map.put("des", "Designation :" + e.getString("des"));
    	        	map.put("pri_uni", "Prix Unitaire: " +  e.getString("pri_uni"));
    	        	map.put("pid", "PID: " +  e.getString("pid"));
    	        	mylist.add(map);			
    			}		
            }catch(JSONException e)        {
            	 Log.e("log_tag", "Error parsing data "+e.toString());
            }
     
            ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
                            new String[] { "des", "pri_uni" }, 
                            new int[] { R.id.item_title, R.id.item_subtitle });
     
            setListAdapter(adapter);
     
            final ListView lv = getListView();
            lv.setTextFilterEnabled(true);	
            lv.setOnItemClickListener(new OnItemClickListener() {
            	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        		
            		@SuppressWarnings("unchecked")
    				HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);	        		
            		Toast.makeText(Main.this, "ID '" + o.get("pid") + "' was clicked.", Toast.LENGTH_SHORT).show(); 
     
     
    			}
    		});
    Le 2éme utilise un ArrayAdapter et récupére les données à partir d'un simple tableau
    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
     planets = (Planet[]) getLastNonConfigurationInstance() ;
        if ( planets == null ) {
          planets = new Planet[] { 
              new Planet("Mercury"), new Planet("Venus"), new Planet("Earth"), 
              new Planet("Mars"), new Planet("Jupiter"), new Planet("Saturn"), 
              new Planet("Uranus"), new Planet("Neptune"), new Planet("Ceres"),
              new Planet("Pluto"), new Planet("Haumea"), new Planet("Makemake"),
              new Planet("Eris")
          };  
        }
        ArrayList<Planet> planetList = new ArrayList<Planet>();
        planetList.addAll( Arrays.asList(planets) );
     
     
     
     
        // Set our custom array adapter as the ListView's adapter.
        listAdapter = new PlanetArrayAdapter(this, planetList);
        mainListView.setAdapter( listAdapter );
    Alors que mon problème se pose dans la récupération des données à partir de la base MySql distante dans un ArrayList .. quelqu'un peut m'aider ??

  2. #2
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Le titre est valable ?

    Parce que un "SimpleAdapter" est le pire des Adapter (utilisation d'une List de HashMap !!!!!), le ArrayAdapter utilise un tableau d'éléments de son choix...

    SimpleAdapter permet d'associer facilement un tableau de Key-Value pairs (la HashMap) à une liste de views d'un layout... La contrepartie est aucun typage de données (le comble dans un langage fortement typé comme Java).
    ArrayAdapter, par défaut, ne sait gérer qu'un "TextView", en utilisant la fonction "toString()" des éléments du tableau..

    Si quelqu'un est interessé, j'ai une classe "SimpleBeanArrayAdapter" qui prend un tableau d'éléments (comme ArrayAdapter) et associe les TextView à des "bean-properties" des éléments (comme SimpleAdapter).


    Si la question est récupérer d'une base de donnée distante les valeurs alors il y a plein de concepts:
    Coté serveur:
    PHP-In: pour transformer la requête HTTP en requête MySQL
    PHP-Out: pour transformer le curseur MySQL en sortie dans le bon format (en général JSON)
    Mais ca peut être aussi du Java en utilisant un serveur comme Tomcat...
    Coté client:
    AsyncTask pour gérer l'ensemble de la communication avec le serveur de manière asynchrone (c'est obligatoire je rappelle).
    HttpClient / HttpGet pour préparer la requete...
    HttpResponse, Entity et surtout EntityUtils.toString(), JSONObject/JSONArray pour lire la réponse et pouvoir la décoder facilement.
    Ensuite le passage de données d'un format (JSON) à un autre (Java array), j'espère que ce n'est pas ce qui te pose probleme ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Création d'une HashMap pour insérer les informations du premier item de notre listView
    	            // la bitmape etant venu du Mysql sous forme BLOB et elle doit etre décoder    
    	                 byte[] decodedString = Base64.decode(json_data.getString("image"), Base64.DEFAULT);
    	                 Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    	                 map = new HashMap<String, Object>();
    	                 map.put("titre", json_data.getString("titre"));
    	                 map.put("description", json_data.getString("texte"));
    	                 map.put("img", decodedByte);
    	                 map.put("dat", json_data.getString("dat"));
    	                 listItem.add(map);

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Parce que un "SimpleAdapter" est le pire des Adapter (utilisation d'une List de HashMap !!!!!), le ArrayAdapter utilise un tableau d'éléments de son choix...
    Je plussoie fortement !

    Citation Envoyé par nicroman Voir le message
    Si quelqu'un est interessé, j'ai une classe "SimpleBeanArrayAdapter" qui prend un tableau d'éléments (comme ArrayAdapter) et associe les TextView à des "bean-properties" des éléments (comme SimpleAdapter).
    Moi ca m'intéresse. C'est 100% générique ? c-a-d que tu passes par la reflection ?
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 17h48
  2. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 12h39
  3. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 11h15
  4. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 09h55
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 18h59

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