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 :

Probleme connexion application android vers bdd mysql


Sujet :

API standards et tierces Android

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Probleme connexion application android vers bdd mysql
    Salut,

    dans le cadre de mon projet bts je dois développer une application android capable d'afficher des données retirées sur une bdd distante mysql.

    Je connais peu l'android, j'en suis donc au stade de suivre les différents tutoriels proposés sur internet.
    J'ai donc réalisé un projet à l'aide d'un tutoriel pour afficher des noms de villes récoltés sur une base de donnés distante.
    Mais lorsque je lance l'application sur mon émulateur android, il s'affiche uniquement le lien vers la page php qui fait liaison entre mysql et android, je comprends pas trop pourquoi, et sur tout les tutoriels que je suis j'ai le même problème.

    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
    101
    package com.exemple.ville;
     
    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.util.Log;
    import android.widget.LinearLayout;
    import android.widget.TextView;
     
    public class ville extends Activity {
    	TextView txt;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.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://10.0.2.2/ville.php";
     
    	private String getServerData(String returnString) {
    		InputStream is = null;
    		String result = "";
    		// Envoyer la requête au script PHP.
    		// Script PHP : $sql=mysql_query("select * from tblVille where Nom_ville like '".$_REQUEST['ville']."%'");
    		// $_REQUEST['ville'] sera remplacé par L dans notre exemple.
    		// Ce qui veut dire que la requête enverra les villes commençant par la lettre L
    		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    		nameValuePairs.add(new BasicNameValuePair("ville","L"));
     
    		// Envoie 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());
    		}
     
    		// Convertion 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_ville: "+json_data.getInt("ID_ville")+
    						", Nom_ville: "+json_data.getString("Nom_ville")
    				);
    				// 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; 
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
      mysql_connect("localhost","root","root");
      mysql_select_db("bdVille");
      $sql=mysql_query("SELECT * FROM tblVille WHERE Nom_ville like '".$_REQUEST['ville']."%'");
      while($row=mysql_fetch_assoc($sql))
      $output[]=$row;
      print(json_encode($output));
      mysql_close();
    ?>

  2. #2
    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
    Surement parce que returnString vaut toujours "http://10.0.2.2/ville.php", et cela parce que le code placé dans le try échoue. Regardes ton Log puisque tu as loggé l'erreur.

    PS : le code de connexion devra être threadé de toute façon. Tutoriel incorrect.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je n'arrive pas à récupérer le fichier de log, à cause des restrictions des ordis du lycée...
    J'ai tout de même réussi à récupérer une erreur lié à l'application: (enfin je pense)
    Log_tag E Error parsing data org.json.JSONException: No value for ID_ville

    PS : le code de connexion devra être threadé de toute façon. Tutoriel incorrect.
    La j'ai pas tout compris je débute vraiment en ce qui concerne android, du coup les termes techniques

  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
    Le tutoriel utilisé a été simplement recopié, et est juste très mauvais.

    1. Comme dit par Hephaistos, on ne fait pas d'opération longue dans le code ("thread") de l'interface... Cela bloque l'interface et peut même provoquer une erreur "Application Not Responding". Comme aucun timeout n'est spécifié pour les connexions, le timeout par défaut va s'appliquer, soit environ... 2 minutes si mes souvenirs sont bons... L'utilisateur lance l'application, et ne peut plus rien faire (pas d'affichage visible) pendant 2 minutes.... c'est *TRES* mauvais.
    Toutes les opérations potentiellement longues doivent donc être réalisé dans un "thread" à part. Il existe des outils dans Android pour s'éviter la gestion (complexe) des threads: les Loaders, les AsyncTask....

    2. L'utilisation de "Log" est mauvaise:
    On n'écrit pas: Log.e("log_tag", "Error in http connection " + e.toString());
    mais: Log.e("log_tag", "Error in http connection ",e);
    Ce qui permet de conserver la "stack-trace"/

    3. La gestion des exceptions est un non-sens complet... Dans le code, que se passe-t-il si une exception se produit disons pendant le "httpclient.execute(httppost);" ?
    On arrivera dans: Log(...) ... et ? on continuera juste en dessous:
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    Mais "is" est null à ce moment là !!! => NullPointerException
    Donc on se retrouve dans Log(...) et ? on continue encore juste en dessous:
    JSONArray jArray = new JSONArray(result);
    Qui enverra une JSONException car result est vide et n'est donc pas une "array" JSON !

    Tout le code peut être simplifié en:
    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
     
    StringBuilder ret = new StringBuilder();
    try {
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("ville","L"));
     
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(strURL);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
     
        String result = EntityUtils.toString(entity);
     
        JSONArray jArray = new JSONArray(result);
        for (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_ville: "+json_data.getInt("ID_ville")+ ", Nom_ville: "+json_data.getString("Nom_ville"));
     
               // Résultats de la requête
               returnString.append("\n\t");
               returnString.append(jArray.getJSONObject(i).toString());
    } catch (Exception ex) {
        Log.e("MaClasse","Erreur de récupération des villes",ex);
    }
    return returnsString.toString();

Discussions similaires

  1. Connexion d'une application Android à une BDD externe (mais pas avec PHP)
    Par SaladinDev dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 29/07/2014, 12h56
  2. 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
  3. 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
  4. [XML][MYSQL] Importation données XML vers BDD MySql
    Par Ben-o dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 04/05/2006, 18h13
  5. [SGBD] Traitement Données Formulaire Vers BDD Mysql
    Par Thierry8 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 29/03/2006, 23h22

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