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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    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
    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 confirmé

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

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

    Pourrais tu nous fournir ton logcat ?

    Merci.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    NetworkOnMainThreadException

    et comme le code est copié/collé d'un tutoriel horrible, il se transforme en NullPointerException

  4. #4
    Membre habitué
    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
    Par défaut
    Bonjour,
    Merci d'avoir accorder un temps pour me répondre. D'abord voila mon LogCatNom : Logcat.PNG
Affichages : 176
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 confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    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.

  6. #6
    Membre habitué
    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
    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

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