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 :

Android & MySQL


Sujet :

Android

  1. #1
    Membre habitué Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Points : 131
    Points
    131
    Par défaut Android & MySQL
    Bonjour,

    J'ai un petit problème avec mon code java et JSON pour récupérer des données MySQL depuis une appli android.

    Mon code est le suivant :

    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
    97
    98
    99
    package activite.moi;
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.widget.LinearLayout;
    import android.widget.TextView;
     
    public class ListRestaurant2 extends Activity {
    	TextView txt;
    	String returnString = "";
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.listrestaurant);
     
    		LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
    		txt = new TextView(getApplicationContext());  
    		rootLayout.addView(txt);
    		setContentView(rootLayout);  
     
    		txt.setText(getServerData()); 
    	}
     
    	public static final String strURL = "URL/ville.php";
     
    	private String getServerData() {
    		InputStream is = null;
    		String result = "";
     
    		// CHOIX REQUETE :
    		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    		nameValuePairs.add(new BasicNameValuePair("ville", "L"));
     
    		// CONNEXION :
    		try 
    		{
    			HttpClient httpclient = new DefaultHttpClient();
    			HttpPost httppost = new HttpPost(strURL);
    			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    			HttpResponse response = httpclient.execute(httppost);
    			HttpEntity entity = response.getEntity();
    			is = entity.getContent();
    		}
    		catch(Exception e)
    		{
    			Log.e("log_tag", "Error in http connection " + e.toString());
    		}
     
    		// CONVERSION REQUETE EN STRING
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    			StringBuilder sb = new StringBuilder();
    			String line = null;
    			while ((line = reader.readLine()) != null) {
    				sb.append(line + "\n");
    			}
    			is.close();
    			result=sb.toString();
    		}catch(Exception e){
    			Log.e("log_tag", "Error converting result " + e.toString());
    		}
     
    		// AFFICHAGE RESULTAT
    		try
    		{
    			JSONArray jArray = new JSONArray(result);
    			for(int i=0;i<jArray.length();i++){
    				JSONObject json_data = jArray.getJSONObject(i);
    				// Résultats de la requête : json_data.getInt("ID_ville")
    				//returnString += jArray.getJSONObject(i)+"\n";
    				returnString += json_data.getString("Nom_ville") +"\n";
    			}
    		}
    		catch(JSONException e)
    		{
    			Log.e("log_tag", "Error parsing data " + e.toString());
    		}
    		return returnString;
    	}
    }
    Il fonctionne parfaitement j'ai bien :

    http://imageshack.us/photo/my-images...titre2hmp.png/

    Maintenant j'aimerais que chaque nom de ville soit dans un bouton pour créer une sorte de "catalogue" comme on dit. Parce qu'avec ce code toutes les villes récupérer dans la BDD sont "mise" dans le même String et je ne peux rien en faire. Il faudrait que le résultat soit un Bouton Lille, puis un Bouton Lyon, je dis des boutons mais les TextView c'est pareil n'importe qu'elle objet mais indépendant pour chaque résultat.

    J'ai essayé toute sorte de choses avec des tableau de string en entrée/sortie dans la fonction getServerData puis un tableau de bouton dans le onCreate pour faire des setText sur les valeurs récupérer dans le tableau mais rien ne fonctionne.

    Si quelqu'un pouvait me montrer comment faire je lui serait très reconnaissant, j'ai ratissé le web mais le peu que je trouve sur les connexions mySQL avec android ne m'aide pas beaucoup. J'espère que vous avez compris mon problème.

    Merci d'avance.

  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
    Pourtant ceci devrait fonctionner:

    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
     
    private String getServerData() {
    		InputStream is = null;
    		String result = "";
                                ArrayList<String> returnedValues = new ArrayList<String>();
     
    		// CHOIX REQUETE :
    		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    		nameValuePairs.add(new BasicNameValuePair("ville", "L"));
     
    		// CONNEXION :
    		try 
    		{
    			HttpClient httpclient = new DefaultHttpClient();
    			HttpPost httppost = new HttpPost(strURL);
    			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    			HttpResponse response = httpclient.execute(httppost);
    			HttpEntity entity = response.getEntity();
    			is = entity.getContent();
    		}
    		catch(Exception e)
    		{
    			Log.e("log_tag", "Error in http connection ",e);
    		}
     
    		// CONVERSION REQUETE EN STRING
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    			StringBuilder sb = new StringBuilder();
    			String line = null;
    			while ((line = reader.readLine()) != null) {
    				sb.append(line + "\n");
    			}
    			is.close();
    			result=sb.toString();
    		}catch(Exception e){
    			Log.e("log_tag", "Error converting result ",e);
    		}
     
    		// AFFICHAGE RESULTAT
    		try
    		{
    			JSONArray jArray = new JSONArray(result);
    			for(int i=0;i<jArray.length();i++){
    				JSONObject json_data = jArray.getJSONObject(i);
    				// Résultats de la requête : json_data.getInt("ID_ville")
    				//returnString += jArray.getJSONObject(i)+"\n";
    				returnedValues.add(json_data.getString("Nom_ville"));
    			}
    		}
    		catch(JSONException e)
    		{
    			Log.e("log_tag", "Error parsing data:",e);
    		}
    		return returnedValues.toArray(new String[returnedValues.size()]);
    	}
    }
    C'est quoi exactement qui ne marche pas ?

    Au fait... je n'ai modifié que la partie décodage mais le reste du code est bizarre: quand une exception se produit dans la partie "http", on continue quand même à essayer de décoder... et j'ai remplacé les Log... (+e.toString()) par Log(..,...,e); bien mieux pour débugger (et savoir quelle ligne a produit l'exception).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre habitué Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Points : 131
    Points
    131
    Par défaut Android & MySQL
    Merci pour votre réponse nicroman,

    Le code viens de ce tuto : http://www.erlem-technologies.com/fr...a-laide-de-php

    En fait ce n'est pas vraiment que ça ne marche pas, c'est que je voudrais que le résultat ne soit pas dans un textview tout seul qui m'affiche ici : Lyon et Lille, mais que chaque résultat soient indépendant dans un boutons par exemple il me faudrait donc un tableau de boutons dans cette partie du code je pense :

    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
    public class ListRestaurant2 extends Activity {
    	TextView txt;
    	String returnString = "";
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.listrestaurant);
     
    		LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
    		txt = new TextView(getApplicationContext());  
    		rootLayout.addView(txt);
    		setContentView(rootLayout);  
     
    		txt.setText(getServerData()); 
    	}
    Parce que dans le code que vous m'avez renvoyé les résultat sont maintenant stocké dans une arrayList je crois. Il faudrait que chaque résultat soit associé dans un bouton à l'appel de la fonction. une boucle qui associe chaque résultat présent dans l'arrayList a son bouton.

    Non pas un seul textView qui contient tout les résultats.

    L'arrayList devrait contenir Lyon, Lille (les villes qui commencent par L de ma requête)

    A l'appel de la fonction dans le OnCreate lorsque que l'arrayList est retourné avec les résultat il faudrait un tableau de boutons dynamique pour que bouton1.setText("Lyon"), bouton2.setText("Lille") etc...

    Le code complet ou j'ai remplacé le morceau que vous m'avez renvoyé est le suivant :

    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
    97
    98
    99
    100
    package activite.moi;
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.widget.LinearLayout;
    import android.widget.TextView;
     
    public class ListRestaurant2 extends Activity {
    	TextView txt;
    	String returnString = "";
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.listrestaurant);
     
    		LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
    		txt = new TextView(getApplicationContext());  
    		rootLayout.addView(txt);
    		setContentView(rootLayout);  
     
    		txt.setText(getServerData()); 
    	}
     
    	public static final String strURL = "URL/ville.php";
     
    	private String[] getServerData() {
    		InputStream is = null;
    		String result = "";
            ArrayList<String> returnedValues = new ArrayList<String>();
     
    		// CHOIX REQUETE :
    		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    		nameValuePairs.add(new BasicNameValuePair("ville", "L"));
     
    		// CONNEXION :
    		try 
    		{
    			HttpClient httpclient = new DefaultHttpClient();
    			HttpPost httppost = new HttpPost(strURL);
    			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    			HttpResponse response = httpclient.execute(httppost);
    			HttpEntity entity = response.getEntity();
    			is = entity.getContent();
    		}
    		catch(Exception e)
    		{
    			Log.e("log_tag", "Error in http connection ",e);
    		}
     
    		// CONVERSION REQUETE EN STRING
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    			StringBuilder sb = new StringBuilder();
    			String line = null;
    			while ((line = reader.readLine()) != null) {
    				sb.append(line + "\n");
    			}
    			is.close();
    			result=sb.toString();
    		}catch(Exception e){
    			Log.e("log_tag", "Error converting result ",e);
    		}
     
    		// AFFICHAGE RESULTAT
    		try
    		{
    			JSONArray jArray = new JSONArray(result);
    			for(int i=0;i<jArray.length();i++){
    				JSONObject json_data = jArray.getJSONObject(i);
    				// Résultats de la requête : json_data.getInt("ID_ville")
    				//returnString += jArray.getJSONObject(i)+"\n";
    				returnedValues.add(json_data.getString("Nom_ville"));
    			}
    		}
    		catch(JSONException e)
    		{
    			Log.e("log_tag", "Error parsing data:",e);
    		}
    		return returnedValues.toArray(new String[returnedValues.size()]);
    	}
    }

  4. #4
    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
    Deux solutions:

    * Ou créer l'interface "à la main" (et rajouter les boutons au fur et à mesure dans la vue principale), genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        ViewGroup vg = (ViewGroup) findViewById(R.id.my_layout);
        String[] myCities = getServerData();
        for (String city : myCities) {
            TextView tv = new TextView(....);
            tv.setText(city);
            myLayout.add(tv);
        }
    * Ou, plus "android style", utiliser les ListView... qui non seulement seront "jolies" mais rajoutent le "Scroll" si besoin (dans le premier cas, il faudrait mettre le layout dans une ScrollView)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        ListView lv = (ListView) findViewById(R.id.my_list);
        lv.setAdapter(new ArrayAdapter<String>(getServerData()));
        lv.setOnItemClickListener(this); // <= il faut que l'activity implémente "OnItemClickListener" bien sur
        ...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre habitué Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Points : 131
    Points
    131
    Par défaut Android & MySQL
    Génial ! Vous êtes génial !!

    J'ai pris la 2ème option que vous avez proposé, elle me semblait plus simple et plus pratique.

    J'ai ajouté votre code en retirant le txt du tuto de base et également le layout qu'il crée au départ je n'en voyais l'utilité.

    Après avoir ajouté la fonction "OnItemClickListener" il ne me restait qu'une erreur sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lv.setAdapter(new ArrayAdapter<String>(getServerData()));
    J'ai cherché sur le web pour voir d'où cela provenait et je suis tombé sur ce site : http://www.ace-art.fr/wordpress/2010...-les-listview/

    J'ai donc ajouté : "this, android.R.layout.simple_list_item_1" juste avant l'appel de la méthode getServerData et miracle ça fonctionne parfaitement !

    Je vous suis très reconnaissant pour votre aide. Je met en Résolu évidement mais j'aimerais bien comprendre la totalité du code.

    Pourriez m'expliquer quelque détails que je ne comprend pas totalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return returnedValues.toArray(new String[returnedValues.size()]);
    Je ne comprend pas tout, on retourne l'arrayList qui contient vraisemblablement {"Lyon", "Lille"} que fait la méthode : "toArray(new String[returnedValues.size()])"

    Et il y a aussi ce fameux "this, android.R.layout.simple_list_item_1" que j'ai du ajouter a l'adapter cela correspond a quoi ?

    Merci pour tout

  6. #6
    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
    list.toArray(...) est valable sur tous les 'containers' de java, et permet de transformer le contenu (qui peut être modifié facilement par de simple 'add'/'remove') en tableau d'élément (statiques).
    La signature de la méthode étant de retourner un tableau d'éléments, on transforme la liste utilisée pour construction dynamique en tableau.

    A noter qu'on pourrait tout à fait retourner une liste de string à la place...


    Les "ListAdapter" sont utilisés par android comme interface entre la ListView (qui gere la position, les objets selectionnés, les "Views") et les données elle-même... Cet adapter contient donc non seulement un accès aux données, mais aussi comment chaque "view" pour chaque donnée doit être crée.

    Le "ArrayAdapter" prend pour données une liste (ou un tableau) d'éléments. Pour la construction par défaut des views: un context android (obligatoire quand on travaille avec l'UI) et un "layout" pour ces views.. Le layout par défaut "simple_list_item_1" est une liste simple de "TextView" (qui ont comme id android.R.id.text1), et le comportement par défaut est de placer comme texte dans ce TextView la valeur des objets (soit la chaine elle meme dans notre cas).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre habitué Avatar de Willy55
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 188
    Points : 131
    Points
    131
    Par défaut Android & MySQL
    Merci pour tout. Je met Résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Android Json Mysql
    Par tabbabi dans le forum Android
    Réponses: 5
    Dernier message: 03/04/2012, 17h59
  2. Envoyer des données depuis mon application android vers mysql
    Par bennour.mohamed dans le forum Android
    Réponses: 9
    Dernier message: 18/07/2011, 14h42
  3. Android et MySql
    Par mflat2 dans le forum Android
    Réponses: 3
    Dernier message: 28/06/2010, 09h29

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