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 :

[MySQL / JSON / PHP] Connecter une application à une base de données


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut [MySQL / JSON / PHP] Connecter une application à une base de données
    Bonjour,

    J'essaye actuellement de connecter mon application avec une base de données située sur un serveur distant. Je me suis pas mal renseigné et apparemment, il faut utiliser JSON.

    J'ai trouvé un bon tutoriel mais j'ai un peu de mal à comprendre certaines lignes de code, ce qui fait que je ne comprends pas tout à fait pourquoi cela ne fonctionne pas quand j'essaye d'adapter ce code à mon projet.

    Tout d'abord, je crée un fichier PHP que je mets dans un dossier de mon site web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
      include('connection.php');
      $sql=mysql_query("SELECT * FROM membres WHERE nom like '".$_REQUEST['membres']."%'");
      while($row=mysql_fetch_assoc($sql))
      $output[]=$row;
      print(json_encode($output));
      mysql_close();
    ?>
    Ensuite dans mon main Activity je place ce 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
        @Override
        protected void onCreate(Bundle savedInstanceState) {
     
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            LinearLayout rootLayout = new LinearLayout(getApplicationContext());
            txt = new TextView(getApplicationContext());
            rootLayout.addView(txt);
            setContentView(rootLayout);
            // Définir le texte et appeler la fonction de connexion.
            txt.setText("Connexion...");
            // Appeler la méthode pour récupérer les données JSON
            txt.setText(getServerData(strURL));
        }
     
        // Mettre l'adresse du script PHP
        // Attention localhost ou 127.0.0.1 ne fonctionnent pas. Mettre l'adresse IP local.
        public static final String strURL = "http://www.monsite.fr/export.php";
     
        private String getServerData(String returnString) {
     
            InputStream is = null;
            String result = "";
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("membres","M"));
     
            // Envoi de la commande http
            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 de la requête 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());
            }
     
            // Parse les données JSON
            try{
                JSONArray jArray = new JSONArray(result);
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject json_data = jArray.getJSONObject(i);
                    // Affichage ID_ville et Nom_ville dans le LogCat
                    Log.i("log_tag","id: " + json_data.getInt("id") + ", nom: " + json_data.getString("nom"));
                    // Résultats de la requête
                    returnString += "\n\t" + jArray.getJSONObject(i);
                }
            }catch(JSONException e){
                Log.e("log_tag", "Error parsing data " + e.toString());
            }
            return returnString;
        }
    Je fais ça mais ça ne fonctionne pas et je ne sais pas exactement d'où vient le problème.

    Est-ce que je tape mal l'adresse du fichier ?

    Est-ce que quelqu'un sait ce qu'est exactement NameValuePair ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    L’adresse du site est normalement correcte (après, on ne peut pas vérifier ^^).

    Le NameValuePair, c'est pour faire des paires de clé/valeur (comme son nom l'indique) et ici, avec les méthodes utilisées, ce seront donc les paramètres POST que tu envois.

    Pour ton problème, tu as des erreurs dans le logcat ou c'est ton String retourné qui est vide/incorrect ?
    Essaye de mettre plusieurs traces après chaque opération/dans les boucles pour voir si ta chaîne se construit bien, ou mieux, utilise le debugger.


    En passant, tu devrais regarder du côté des AsyncTask pour faire ce genre de traitement, il ne faut pas que ça tourne dans le thread UI.
    http://developer.android.com/referen...AsyncTask.html

  3. #3
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Bonjour,
    y'a quelques semaines, j'ai été dans la même situation que toi, je n'arrivais pas à comprendre comment ça fonctionne un web service malgré que j'ai lu plusieurs tutoriels.
    Oui JSON est nécessaire pour parser les données à partir du site.
    Je n'ai pas compris l'erreur que vous avez eu, cependant voici le lien qui m'a aidé à comprendre: http://www.androidhive.info/2012/05/...ith-php-mysql/
    Bonne chance
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oui c'est bien mon string qui est vide à la fin et donc n'affiche rien...

    C'est vraiment une partie compliquée dans le développement Android... Merci pour ton tutoriel janyoura mais il est super compliqué lol.

    Si vous en avez des plus simples n'hésitez pas car je bloque vraiment

    Merci beaucoup je continu de chercher de mon côté

  5. #5
    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
    Il est compliqué parce qu'on parle d'architecture 3-Tiers...de client/serveur...
    Un truc réservé il y a quelques années aux développeurs chevronnés... mais quasi indispensable dans l'environnement mobile.

    Donc... pour simplifier:

    On parle de client/serveur.... Le "client" c'est l'application android, le "serveur" c'est le service distant.
    On parle d'architecture 3-Tiers parce que le "serveur" est divisé en deux parties: une partie "logicielle" et une partie "base de données".

    Donc on a grosso-modo:
    BASE-DE-DONNEES (MySQL par exemple)
    ||
    WEB-SERVICE (codé en PHP, Java, Perl, CGI, peu importe)
    ||
    APPLICATION ANDROID (codé en Java)

    Pour que toutes ces parties communiquent entre elles il faut qu'elles se mettent d'accord sur des "protocoles".

    Entre WEB-SERVICE et BASE-DE-DONNEES on passera presque certainement par "SQL"... Ce qui permet de remplacer MySQL par n'importe quelle base de donnée supportant le protocole SQL (Oracle, SQL Server, etc...). A noter qu'il existe d'autres modes de communication avec une base de données (NoSQL par exemple )

    Entre WEB-SERVICE et APPLICATION c'est plus compliqué... on peut choisir un protocole utilisé dans les deux sens de la communication (requête/réponse) comme 'SOAP', ou alors un protocole pour chaque sens: la requête étant par exemple du REST, la réponse étant par exemple du JSON (mais on pourrait choisir du XML, du simple TEXT, ou tout ce qu'on veut)...

    Bon... ceci étant dit... passons à l'implémentation Android.
    Le code présenté vient très certainement d'un tutoriel (malheureusement pas un bon), voici quelques erreurs de ce code (getServerData):

    * La gestion des erreurs ne correspond à rien...
    --- D'abord la fonction n'envoie jamais d'erreur (elle ne lève jamais d'exception) donc elle n'a aucun moyen de dire à celui qui l'appelle "désolé, ça n'a pas marché... Une fonction getServerData() devrait à priori au moins lever une exception de type "IOException"....
    --- Régulièrement on fait un "catch(Exception ex) { Log.e("log_tag", "Error in http connection " + e.toString()); }" Il faut bien comprendre que ce code va simplement écrire une ligne avec le nom de l'exception (sans le détail), mais va continuer à exécuter le reste de la fonction comme si de rien n'était. Ce n'est évidemment pas ce qui est voulu.
    * La gestion des entité: Dans ce code, il est écrit en dur que la réponse DOIT être en ISO-8859-1 (soit plus que 10% seulement des web-servers actuels), déjà UTF-8 aurait été plus adapté, mais en prime il y a tout dans Entity pour le gérer automatiquement.
    * Comme indiqué par gilloddon, il est INTERDIT de faire des appels internet dans le thread principal (réservé à l'UI), donc à partir par exemple d'un onClick ou un onCreate...

    Donc... commençons par la fonction utilitaire getServerData et rendons la "propre":
    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
     
    private String getServerData(String returnString, String membres) throws IOException
    {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("membres",membres));
     
            // UN SEUL TRY/CATCH
            try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(strURL);
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
     
                // tout le code de lecture du InputStream est ici !!!
                String entityStr = EntityUtils.toString(entity,"UTF-8");
     
                StringBuilder returnBuffer = new StringBuilder(returnString);
                JSONArray jArray = new JSONArray(entityStr);
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject json_data = jArray.getJSONObject(i);
                    // Affichage ID_ville et Nom_ville dans le LogCat
                    Log.i("log_tag","id: " + json_data.getInt("id") + ", nom: " + json_data.getString("nom"));
                    // Résultats de la requête
                    returnBuffer.append("\n\t").append(jArray.getJSONObject(i)); 
                }
                return returnBuffer.toString();
            } catch (IOException ioe) {
                throw ioe;
            } catch(Exception e) {
                throw new IOException("Service problem",e);
            }
        }
    Déjà c'est mieux... je ne vois pas trop l'interêt du returnString (surtout rajouter jArray.getJSONObject(i) va simplement rajouter un truc genre "android.json.JSONObject#787aeA7fa" pourquoi ne pas simplement retourner le JSONArray ? Mais bon... peu importe.


    Ensuite... le code appelant... il faut déjà un tâche asynchrone:
    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
     
    class GetServerDataTask extends ASyncTask<String,Void,String>
    {
          public String doInBackground(String ... params)
          {
              try {
                 return getServerData(params[0],params[1]);
              } catch (IOException ex) {
                 Log.e("GetServerDataTask","Failed !",ex);
                 return null;
              }
          }
     
          public void onPostExecute(String retStr)
          {
                MyActivity.this.onJSONResult(retStr);
          }
    }
    Bien sur la classe doit être déclarée DANS la classe de l'activité (ici appelée MyActivity)

    Et pour finir... le onCreate de l'activité:
    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
     
    @Override
        protected void onCreate(Bundle savedInstanceState) {
     
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            LinearLayout rootLayout = new LinearLayout(getApplicationContext());
            txt = new TextView(getApplicationContext());
            rootLayout.addView(txt);
            setContentView(rootLayout);
            // Définir le texte et appeler la fonction de connexion.
            txt.setText("Connexion...");
     
            new GetServerDataTask(strUrl,"M").execute();
        }
     
        protected void onJSONResult(String retData)
        {
            // Appeler la méthode pour récupérer les données JSON
            txt.setText(retData);
        }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    D'accord, merci beaucoup pour toutes ces précisions, je vais essayer de travailler avec ça

  7. #7
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par Mikel63 Voir le message
    Oui c'est bien mon string qui est vide à la fin et donc n'affiche rien...

    C'est vraiment une partie compliquée dans le développement Android... Merci pour ton tutoriel janyoura mais il est super compliqué lol.

    Si vous en avez des plus simples n'hésitez pas car je bloque vraiment

    Merci beaucoup je continu de chercher de mon côté
    Le web service en général est compliqué comme l'a expliqué, Nicroman, je le remercie d'ailleurs.

    J'ai fouillé un peu partout cherchant des tutoriels bien clair et qui fonctionnent pendant 3 semaines et franchement j'ai trouvé celui que je t'ai donné le meilleur, il est beaucoup moins compliqué par rapport à d'autres d'ailleurs je l'ai testé directement sur un serveur distant (et non pas WAMP Server)
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonsoir !

    J'ai pas mal avancé depuis la dernière fois et grâce à votre aide j'ai réussit à connecter mon application avec ma base de donnée distante et également à afficher le membre dont le nom commence par "M".

    Ce test marche impeccable. J'ai maintenant une petite question supplémentaire... ^^

    Dans mon programme le Json interroge un fichier PHP qui interroge la base de données. Faut-il donc créer un fichier PHP pour chaque requête souhaitée ?

  9. #9
    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
    Alors là... on rentre dans la philosophie du Net et des Web-Services ....

    Les pro-100%-REST comme moi te diront:
    * Une commande = 1 "verbe" HTTP
    * Un objet (sur lequel exécuter la commande) = 1 URL.
    * Les paramètres de la commande dans le corps du POST.

    * Une visualisation (recherche,...) = GET HTTP
    * Un objet à visualiser = 1 URL.
    * Les paramètres de la visualisation dans les paramètres de l'URL.

    Donc par exemple:
    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
     
    GET http://my.site.com/monservice/members?type=JSON&filter=M
    Recherchera les 'members' dont le nom commence par M, résultat retourné en JSON.
     
    POST http://my.site.com/monservice/members
    Rajoutera un 'member' dans la liste
     
    PUT http://my.site.com/monservice/members/238883
    Modifiera le 'member' 238883
     
    DELETE http://my.site.com/monservice/members/238883
    Supprimera le 'member' 238883
     
    MESSAGE http://my.site.com/monservice/members/238883
    Enverra un message au 'member' 238883
     
    etc...

    Après rien n'empêche de faire du function oriented: Une URL = une fonction

    Ou simplement du sevice-oriented: Une URL = un service, dans les paramètres on passe toutes les informations (commande, objets, ...).

    Par contre toujours conserver le paradigme:
    GET = consultation seulement (pas de modification).
    POST/PUT/DELETE = modification
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    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
    Je plussoie Nicroman. Et si je puis me permettre de récapituler ses propos :

    Mode function-oriented
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GET http://my.site.com/monservice/memberView?id=45642
    Mode service-oriented
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GET http://my.site.com/monservice/members?cmd=view&id=45642
    Mode REST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GET http://my.site.com/monservice/members/45642
    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

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos précisions, j'y vois plus clair petit à petit lol.

    Jusqu'à présent je testai en android 2.2 et malheureusement je viens d'essayer avec la dernière version et plus rien ne marche...

    Je déprime lol

  12. #12
    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
    NetworkOnMainThreadException ?

    Sinon, il doit y avoir du logcat ....

    Et si tu nous montrais ton code ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Mon code est exactement le même que tu m'a donné lorsque tu as "clarifié" celui que j'avais mis au départ

  14. #14
    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
    Dans ce cas toutes les exceptions (si il y en a) sont bien loguées...
    Que dit le logcat ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Alors les problèmes viennent de cette ligne :

    new GetServerDataTask(strUrl,"M").execute();
    Je ne sais pas pourquoi mais apparament ce constructeur est "undefinied"...

    et de celle la :

    MainActivity.this.onJSONResult(retStr);
    la fonction onJSONResult n'existe plus, il me propose de la changer en setresult, je l'ai fait mais après il me demande un int en paramètre...

  16. #16
    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
    Parcequ'il n 'y a pas de constructeur dans GetServerDataTask ?

    Ceci devrait mieux marcher...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new GetServerDataTask().execute(strUrl,"M");
    Ne jamais recopier du code sans le comprendre (je pourrais poster du code qui efface le disque dur )... D'une part, parce que le but est bien de comprendre ce que l'on fait si on veut le modifier, et ensuite parce que n'ayant souvent rien pour tester le code dans Eclipse il m'arrive très fréquemment de poster un "exemple" de code qui ne compile même pas.

    la fonction onJSONResult n'existe plus, il me propose de la changer en setresult, je l'ai fait mais après il me demande un int en paramètre...
    Dans ce cas, il faut la créer...
    C'est dans cette fonction que l'UI va pouvoir afficher les résultats de la requete !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    merci de ta réponse ! je vais tester tout ça

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pas moyen je n'y arrive pas... J'ai essayé autre chose :

    MainActivity :

    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
     
    public class MainActivity extends Activity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
     
        }
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
     
        public void onClickInscription(View v)
        {
        	Intent i = new Intent("com.example.Inscription");
        	startActivity(i);
        }
     
        public void onClickRecherche(View v)
        {
            //C'est la que je déclenche la connexion a la base
        	Intent i = new Intent("com.example.ConnexionBDD");
        	startActivity(i);
        }
    }
    Activité ConnexionBDD :

    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
     
    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.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.app.Activity;
    import android.net.ParseException;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class ConnexionBDD extends Activity {
    	 protected void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.activity_main);
     
    	        String result = null;
    	        InputStream is = null;
    	        JSONObject json_data=null;
    	        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    	        ArrayList<String> donnees = new ArrayList<String>();
     
    	        try{
    	        //commandes httpClient
    	        HttpClient httpclient = new DefaultHttpClient();
    	           HttpPost httppost = new HttpPost("http://monfichierphp");
    	           httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    	           HttpResponse response = httpclient.execute(httppost);
    	           HttpEntity entity = response.getEntity();
    	           is = entity.getContent();
    	        }
    	        catch(Exception e){
    	         Log.i("taghttppost",""+e.toString());
    	               Toast.makeText(getBaseContext(),e.toString() ,Toast.LENGTH_LONG).show();
    	          }
     
     
    	        //conversion de la réponse en chaine de caractère
    	           try
    	           {
    	            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-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.i("tagconvertstr",""+e.toString());
    	           }
    	           //recuperation des donnees json
    	           try{
    	             JSONArray jArray = new JSONArray(result);
     
    	                for(int i=0;i<jArray.length();i++)
    	                {
     
    	                      json_data = jArray.getJSONObject(i);
    	                      donnees.add(json_data.getString("nom"));
    	                      //r.add(json_data.getString("categorie"));
     
    	                  }
    	                	TextView testBDD = (TextView)findViewById(R.id.testBDD);
    	                    for(int i = 0; i < donnees.size(); i++)
    	                    {
    	                    	testBDD.setText(donnees.get(i) + " \n");
    	                    }
    	               }
    	               catch(JSONException e){
    	                Log.i("tagjsonexp",""+e.toString());
    	               } catch (ParseException e) {
    	                Log.i("tagjsonpars",""+e.toString());
    	          }
    	    }
    }
    Désolé de vous embetter mais je crois que je suis pommé...

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Vous pouvez utiliser slim framework si vous comptez utiliser REST comme web service .
    un article expliquant le fonctionnement et l’utilisation de Slim : http://www.ibm.com/developerworks/xm...x.html?ca=drs-

  20. #20
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Pour le parsing JSon, tu peux utiliser GSon.
    https://code.google.com/p/google-gson/downloads/list

    C'est très simple.
    Si la réponse vous a aidé, pensez à cliquer sur +1

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/11/2013, 16h28
  2. Réponses: 11
    Dernier message: 09/06/2011, 14h00
  3. Réponses: 3
    Dernier message: 07/05/2010, 06h51
  4. Réponses: 2
    Dernier message: 30/03/2010, 02h26
  5. Réponses: 1
    Dernier message: 10/12/2008, 19h22

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