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

API standards et tierces Android Discussion :

Problème de connexion BDD MySQL sous Android


Sujet :

API standards et tierces Android

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Problème de connexion BDD MySQL sous Android
    Bonjour tout le monde,

    J'ai un problème au niveau de l’exécution de mon application. Ma BDD est sur MySQL alors j'ai essayé de la connecter avec son propre interface voitures.xml mais cela ne marche pas il me donne "le programme a cessé de fonctionner"... voila mon code voitures.java Merci d'avance
    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
     
    package com.example.location_voiture;
     
    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.ListActivity;
    import android.net.ParseException;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.Toast;
    public class voitures extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.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://10.0.2.2/connexion_mysql/connexion_mysql.php");
            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"));
     
     
                   }
                    setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, donnees));
                }
                catch(JSONException e){
                 Log.i("tagjsonexp",""+e.toString());
                } catch (ParseException e) {
                 Log.i("tagjsonpars",""+e.toString());
           }
     
        }
    }

  2. #2
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Pourrais tu nous fournir ton logcat ?

    Merci.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    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

    et comme le code est copié/collé d'un tutoriel horrible, il se transforme en NullPointerException
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci d'avoir accorder un temps pour me répondre. D'abord voila mon LogCatNom : Logcat.PNG
Affichages : 166
Taille : 165,9 Ko

    Pour Mr Nicroman je n'ai pas compris de quoi vous parlez, c'est vrai que j'ai copié le code d'un tuto car j'ai un projet à réaliser et je n'ai pas étudier Android... bref veuillez m'expliquer elle est où l'erreur

    Merci à vous tous

  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
    Une petite recherche dans le forum sur NetworkOnMainThreadException permettra de remonter des exemples bien fournis....

    Pour le LogCat désolé, je n'arrive pas à le lire correctement (un simple copier/coller des lignes entre des balises code aurait suffit). Mais j'ai cru deviner un "caused by NullPointerException" comme je l'avais suggeré.

    Voilà le pourquoi:

    Les exceptions sont mal gérées... Si une exception se produit dans le premier try/catch on fait un simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.i("taghttppost",""+e.toString());
    Outre le fait que l'appel à Log est erroné, il aurait fallut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("taghttppost","Erreur de récupération",e);
    Le programme *continue* malgré l'exception

    Sur un BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
    avec "is" valant null (puisqu'il n'a pas été affecté) => NullPointerException qui n'est pas catchée (heureusement) et bim, le programme s'arrête.

    Voici le code correct pour la récupération des données.
    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
     
         ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
         ArrayList<String> donnees = new ArrayList<String>();
     
         try{
            //commandes httpClient
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/connexion_mysql/connexion_mysql.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
     
            String result = EntityUtils.toString(response.getEntity());
     
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++) {
                 JSONObject json_data = jArray.getJSONObject(i);
                 donnees.add(json_data.getString("nom"));
             }
         } catch (Exception ex) {
             Log.e("httpcall","Failed to load data",ex);
         }
     
         setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, donnees));
    Pas besoin de faire 40 blocs try/catch (j'ai fait un tutoriel sur les exceptions en java si besoin).

    Par contre, cela ne marchera toujours pas. La raison étant l'exception initiale (passée sous silence dans l'ancien code): NetworkOnMainThreadException indiquant qu'il est interdit de faire un opération longue dans les fonctions réservées à l'UI (comme le onCreate / onClick etc...) et donc en particulier une utilisation de réseau.

    Utiliser une AsyncTask pour faire la récupération, et dans le onPostExecute() mettre à jour l'adapter.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci infiniment pour votre réponse j'ai bien résolu le problème mais le seul souci c'est que j'arrive pas à avoir la liste affichée il m'affiche fail1 après fail2 et fail3
    voila mon code php suivi du code Java
    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
    <?php
     
    // on se connecte à notre base  pour récupérer les données
     
    $base = mysql_connect ('localhost', 'root', ''); 
     
    mysql_select_db ('location_voiture', $base) ; 
     
    $req =mysql_query("SELECT id_vehicule,marque,modele from vehicule");
     
    $output = array();
    while ($row=mysql_fetch_array($req)) {   
     
        $output[]=$row;   
     
    }
     
    //on encode en JSON
     
    print(json_encode($output));
     
    mysql_free_result ($req); 
     ?>
    voila le code voitures.java
    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
    package com.example.location_voiture;
     
    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.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.app.Activity;
    import android.app.ListActivity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Toast;
    public class voitures extends Activity {
     
     
        InputStream is;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.voitures_loc);
            String result = "";
            //the year data to send
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("",""));
     
            //http post
            try{
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://10.0.2.2/connexion_mysql/connexion_mysql.php");
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost); 
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();
                    Log.e("log_tag", "connection success ");
                    Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
            }catch(Exception e){
                    Log.e("log_tag", "Error in http connection "+e.toString());
                    Toast.makeText(getApplicationContext(), "fail1", Toast.LENGTH_SHORT).show();
     
            }
            //convert response to 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");
                            Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
                    }
                    is.close();
     
                    result=sb.toString();
            }catch(Exception e){
                   Log.e("log_tag", "Error converting result "+e.toString());
                Toast.makeText(getApplicationContext(), "fail2", Toast.LENGTH_SHORT).show();
     
            }
     
            //parse json data
            try{
                    JSONArray jArray = new JSONArray(result);
                    for(int i=0;i<jArray.length();i++){
                           JSONObject json_data = jArray.getJSONObject(i);
                            Log.i("log_tag","id_vehicule: "+json_data.getInt("id_vehicule")+
                                    ", marque: "+json_data.getString("marque")+
                                    ", modele: "+json_data.getString("modele")
     
                            );
                            Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
                   }
     
            }catch(JSONException e){
                    Log.e("log_tag", "Error parsing data "+e.toString());
                    Toast.makeText(getApplicationContext(), "fail3", Toast.LENGTH_SHORT).show();
            }
        }
    }
    qu'est ce que je dois faire?
    Merci d'avance

  7. #7
    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
    Non tu n'as rien fait de ce que j'ai dit....

    Ni le Log.
    Ni la gestion des exception.
    Ni l'utilisation de EntityUtils
    Ni l'utilisation de l'AsyncTask.

    Commence par là (et dans cet ordre) tu verras.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci pour votre reponse. D'abord si je n'ai pas employé ce que vous avez dit c parce que je n'ai aucune idée car je n'ai jamais étudié Android avec MySql quelqu'un puis-je m'aider?
    merci infiniment

  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
    D'abord Android ne joue pas avec MySql...

    D'un coté on a le "client": Android avec utilisation d'un WebService.
    Regarder la documentation d'AsyncTask pour comprendre comment fonctionnent les opérations longues dans une application Android.

    D'un autre coté on a le "service": PHP/Tomcat/Ou-n-importe-quoi-qui-marche avec utilisation de MySQL.

    Pour la partie PHP, je ne serai hélas d'aucune aide.
    Pour la partie Android, j'ai déjà écris le code complet (qui, par hasard, correspond grosso-modo à la partie "doInBackground" d'un AsyncTask) dans le message #5
    Et franchment la lecture de la documentation d'AsyncTask t'aidera à comprendre comment l'insérer dans l'application.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,
    vraiment je me bloque et je dois le rendre avant le 23/01 et j'ai rien encore fait si quelqu'un pourrait me corriger le problème ca sera plus que gentil...
    dsl pour le dérangement et bonne fin de journée

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 129
    Points : 144
    Points
    144
    Par défaut
    Un forum est fait pour aidé et non faire les exercices d'une personne qui visiblement ne prend pas la peine de chercher un peu !

    Il te reste 8 jours pour te bougé ! En sachant que ton truc en 30 minutes est réglé.

    A un moment donné, il faut se prendre en charge...

  12. #12
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Si je demande de l'aide plusieurs fois ca veux dire que je suis bloquée j'ai dis seulement de me corriger un code si vous dites qu'il ne prend plus que 30 min alors dites moi l'erreur a quel niveau svp

  13. #13
    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
    Désolé, mais on vous a déjà répondu...

    1) Utiliser AsyncTask (message #5 par mes soins tout à la fin).

    2) Utiliser un code correct pour la récupération du web (le code est dans le message #5 par mes soins au milieu)

    3) Nous tenir au courant des résultats.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Probléme de connexion d'une application android vers une BD mysql
    Par hajer_baccouch dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 13/05/2012, 00h52
  2. Problème connexion entre MySQL et Android
    Par omarouen dans le forum Android
    Réponses: 4
    Dernier message: 23/02/2012, 16h34
  3. [MySQL] Problème connexion bdd mysql
    Par boobs60 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 11/03/2010, 08h48
  4. Problème connexion BDD MySql avec jdbc
    Par libery dans le forum JDBC
    Réponses: 6
    Dernier message: 27/05/2009, 12h25
  5. Problème de connexion BDD MySQL
    Par womannosky dans le forum JDBC
    Réponses: 12
    Dernier message: 28/04/2009, 11h38

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