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 :

Problème exécution de requête Android -> PHP -> MySQL


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème exécution de requête Android -> PHP -> MySQL
    Bonjour,

    Je souhaite insérer un nom et un prénom dans ma base de données MySQL à partir de mon application android et d'un script php mais ma requête ne s'exécute pas.

    Voici mon script php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    	mysql_connect("****","****","****") or die("erreur de connexion au serveur");
    	mysql_select_db("***");
    	$sql=mysql_query("INSERT INTO Users (Prénom, Nom) VALUES ('".$_POST['prenom']."','".$_POST['nom']."')");
    	//while($row=mysql_fetch_assoc($requete))
    	  	//$output[]=$row;
    	  //print(json_encode($output));
    	mysql_close();
    ?>
    J'ai testé cette requête, elle marche très bien.

    Voici le code java de mon application android :
    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
    @Override
    			  public void onClick(View v) {
    				  prenom.setText("ça marche !!");
    				  try {
    				  HttpPost httpPost = new HttpPost("http://www.brieg-web.fr/insert_user.php");
    				  List<NameValuePair> postParameters = new ArrayList<NameValuePair>(2); 
    				  //On crée la liste qui contiendra tous nos paramètres
    				  //Et on y rajoute nos paramétres
    				  postParameters.add(new BasicNameValuePair("prenom", "toto"));
    				  postParameters.add(new BasicNameValuePair("nom", "toto"));
    				  httpPost.setEntity(new UrlEncodedFormEntity(postParameters));
    				  HttpClient httpclient = new DefaultHttpClient();
    				  httpclient.execute(httpPost); //Voila, la requête est envoyée
    				  } catch (Exception e) {}
    			  }
    J'ai fais pleins de tests mais je n'arrive pas à voir d'où vient le problème.

    Dans LogCat, j'ai ces messages d'erreurs :
    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
    01-09 17:27:24.450: E/AndroidRuntime(4759): FATAL EXCEPTION: main
    01-09 17:27:24.450: E/AndroidRuntime(4759): Process: com.example.whoissam, PID: 4759
    01-09 17:27:24.450: E/AndroidRuntime(4759): android.os.NetworkOnMainThreadException
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at java.net.InetAddress.getAllByName(InetAddress.java:214)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at com.example.whoissam.MainActivity$1.onClick(MainActivity.java:68)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.view.View.performClick(View.java:4424)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.view.View$PerformClick.run(View.java:18383)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.os.Handler.handleCallback(Handler.java:733)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.os.Handler.dispatchMessage(Handler.java:95)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.os.Looper.loop(Looper.java:137)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at android.app.ActivityThread.main(ActivityThread.java:4998)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at java.lang.reflect.Method.invokeNative(Native Method)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at java.lang.reflect.Method.invoke(Method.java:515)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
    01-09 17:27:24.450: E/AndroidRuntime(4759): 	at dalvik.system.NativeStart.main(Native Method)
    Si quelqu'un sait d'où vient mon problème ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Mes excuses, je n'ai pas le temps de te faire une réponse complète.

    Ton problème vient de la mauvaise pratique (tout langage, support, plate-forme... confondues) de faire des appels réseaux (et par extension des opérations longues) directement sur le thread graphique.

    Tu dois passer par une tâche asynchrone, qui notifiera l'UI quand elle aura terminée. Je te suggère de t'intéresser à la classe AsyncTask pour réaliser ce traitement, elle est faite pour ça et pas trop dure à comprendre.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse Hizin.
    Je vais étudier ce que tu me dis

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé avec AsyncTask comme tu m'as dit en utilisant des bouts de code trouvés mais ça ne marche toujours pas.
    Peut-être saurais-tu où l'erreur se trouve ?

    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
    public class MainActivity extends Activity {
     
    	  // On voudra détecter uniquement les clics sur ce bouton
    	  private Button valider = null;
    	  private EditText prenom = null;
    	  private InsertTask mInsert = null;
     
    	  @Override
    	  public void onCreate(Bundle savedInstanceState) {
    		  super.onCreate(savedInstanceState);
    		  setContentView(R.layout.activity_main);
     
    		  valider = (Button)findViewById(R.id.valider);
    		  prenom = (EditText)findViewById(R.id.prenom);
     
    		  valider.setOnClickListener(new View.OnClickListener() {
     
    			  @Override
    			  public void onClick(View v) {
    				  try {
     
    					  mInsert = new InsertTask(MainActivity.this);
    				        // On l'exécute
    				      mInsert.execute();
     
    				  } catch (Exception e) {}
     
     
    			  } 
     
    		  });  
    	  }
     
    	// L'AsyncTask est bien une classe interne statique
    	  static class InsertTask extends AsyncTask<Void, Integer, Boolean> {
    	    // Référence faible à l'activité
    	    private WeakReference<MainActivity> mActivity = null;
     
    	    public InsertTask (MainActivity pActivity) {
    	    	mActivity = new WeakReference<MainActivity>(pActivity);
    	    }
     
    	    @Override
    	    protected void onPostExecute (Boolean result) {
    	      if (mActivity.get() != null) {
    	        if(result)
    	          Toast.makeText(mActivity.get(), "Requête réussie !", Toast.LENGTH_SHORT).show();
    	        else
    	          Toast.makeText(mActivity.get(), "Echec de la requête", Toast.LENGTH_SHORT).show();
    	      }
    	    }
     
    	    @Override
    	    protected Boolean doInBackground (Void... arg0) {
    	      try {
    	    	//On donne le lien du script php à exécuter
    			  HttpPost httpPost = new HttpPost("http://www.brieg-web.fr/insert_user.php");
    			  //On crée la liste qui contiendra tous nos paramètres
    			  List<NameValuePair> postParameters = new ArrayList<NameValuePair>(2); 
    			  //Et on y rajoute nos paramétres
    			  postParameters.add(new BasicNameValuePair("prenom", "toto"));
    			  postParameters.add(new BasicNameValuePair("nom", "toto"));
    			  //On ajoute les paramètres au httppost
    			  httpPost.setEntity(new UrlEncodedFormEntity(postParameters));
    			  //On crée un httpclient
    			  HttpClient httpclient = new DefaultHttpClient();
    			  //On exécute le script
    			  httpclient.execute(httpPost);
    	          Thread.sleep(1000);
    	        return true;
    	      }catch(Exception e) {
    	        e.printStackTrace();
    	        return false;
    	      }
    	    }
    	  }
    }
    Merci !

  5. #5
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Quelle erreur as-tu ?

    Remarque : catch (Exception e) {} : JAMAIS ! Remplace par un Log.e(TAG, "un message significatif", e); (et remplace le printStackTrace par le Log.e aussi ).
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    01-10 09:09:33.157: E/AndroidRuntime(3985): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    01-10 09:09:33.157: E/AndroidRuntime(3985): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    01-10 09:09:33.157: E/AndroidRuntime(3985): 	at java.lang.Thread.run(Thread.java:841)
    Sinon j'aimerais juste ouvrir une URL si possible.
    Mais ça non plus ça ne marche pas.
    Je voudrais juste lancer : http://www.brieg-web.fr/insert_user.php?prenom=azerty
    Pour exécuter mon script.

Discussions similaires

  1. [AJAX] Exécuter deux requêtes SQL en PHP
    Par jeyGey dans le forum jQuery
    Réponses: 10
    Dernier message: 04/02/2014, 15h56
  2. [Oracle] Exécuter plusieurs requêtes (block) en PHP vers Oracle
    Par hshamsan dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2008, 09h42
  3. [ODBC] Problème exécution requête avec connexion ODBC/PHP
    Par nicaud dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/04/2008, 13h20
  4. Réponses: 2
    Dernier message: 17/10/2005, 14h58

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