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 :

[Android PHP] Probleme de connexion a la base de données


Sujet :

API standards et tierces Android

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Points : 47
    Points
    47
    Par défaut [Android PHP] Probleme de connexion a la base de données
    bonjour, je débute sur android et je suis arrivé a un point que je n'arrive pas a comprendre.
    je m'explique j'ai un code ou sur une machine il marche par contre sur un autre machine( principal ) non !
    le code est de ce connecté a l'aide de PHP et JSON a la base de donnée et de récuperer des données et de les afficher sur le mobile
    je donne les versions
    WampServer 2.4
    PHP : 5.4.12
    SQL : 5.6.12
    APACHE 2.4.4

    le code est le suivant :
    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
     package com.example.envoie;
     
     
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URI;
     
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONException;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class MainActivity extends Activity {
    Button btnrecup;
    TextView txtmsg;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            txtmsg =(TextView)findViewById(R.id.txtrecup);
    	     btnrecup =(Button)findViewById(R.id.Buton);
     
     
        }
     
    public void recupererMessage(View v){
    	StringBuffer sb=new StringBuffer("");
    	BufferedReader br=null;
    	try{
    		 HttpClient client = new DefaultHttpClient();
             HttpGet get = new HttpGet();
             URI uri = new URI("http://mon-ip-a-l'aide-de-ipconfig(fait)/andro/ess.php");
            get.setURI(uri);
            HttpResponse reponse= client.execute(get);
            InputStream is= reponse.getEntity().getContent();
            br= new BufferedReader(new InputStreamReader(is,"UTF-8"), 8192);
            String ligneLue =br.readLine();
            while(ligneLue != null){
            	sb.append(ligneLue);
            	sb.append("\n");
            	ligneLue =br.readLine();
            }
     
    	}catch(Exception e){
    		Toast.makeText(this,"Une erreur est survenue!", Toast.LENGTH_SHORT).show();
     
    }finally{
    	if(br!=null){
    		try{
    			br.close();
    		}catch(IOException e){
    			Toast.makeText(this,"Une erreur graaave  est survenue!", Toast.LENGTH_SHORT).show();
    			}
    		}
    }
    	try{
    		JSONArray jArray= new JSONArray(sb.toString());
    		txtmsg.setText(jArray.getJSONObject(0).getString("msg").toString());
    	}catch(JSONException je){
    		Toast.makeText(this,"ERROR", Toast.LENGTH_SHORT).show();
     
     
    	}
      }    
    }
    le fichier ess.php comporte :

    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
    <?php 
     
    $base = mysql_connect ('localhost', 'root', ''); 
     
    $db= mysql_select_db ('new', $base) ; 
     
    //$des=$_POST['message'];
    $req = mysql_query("SELECT msg FROM message");
     
     
    // On fait une boucle pour lister tout ce que contient la table :
     
    while ($donnees = mysql_fetch_array($req) )
     
        $sortie[]=$donnees;
        $jsob= json_encode($sortie);
    	print ($jsob);
     
    //mysql_close();
     
    ?>
    mon activity_main.xml est :

    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
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
     
       <TextView 
           android:text="@string/textView"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"/>
     
           <Button
               android:id="@+id/Buton"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:layout_alignLeft="@+id/txtrecup"
               android:layout_alignParentTop="true"
               android:layout_marginTop="49dp"
               android:text="@string/button1"
               android:onClick="recupererMessage" />
     
           <TextView
               android:id="@+id/txtrecup"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:layout_alignParentLeft="true"
               android:layout_below="@+id/Buton"
               android:layout_marginTop="56dp"
               android:text="@string/textView1" />
     
    </RelativeLayout>
    Mon Manifest est :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.envoie"
        android:versionCode="1"
        android:versionName="1.0" >
     
        <uses-sdk
            android:minSdkVersion="2"
            android:targetSdkVersion="19" />
        <uses-permission android:name="android.permission.INTERNET"/>
     
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.envoie.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest>

    je ne comprends pas pourquoi je n'arrive pas a récup:
    PS : quand je click sur Recuperer c'est le TOAST : ERROR qui m'affiche.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 34
    Points : 54
    Points
    54
    Par défaut
    PS : quand je click sur Recuperer c'est le TOAST : ERROR qui m'affiche.
    Quel est le contenu de l'erreur ??

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Points : 47
    Points
    47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try{
    		JSONArray jArray= new JSONArray(sb.toString());
    		txtmsg.setText(jArray.getJSONObject(0).getString("msg").toString());
    	}catch(JSONException je){
    		Toast.makeText(this,"ERROR", Toast.LENGTH_SHORT).show();


    c'est ce catch la qui s’exécute.

  4. #4
    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
    Ce catch
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    catch(JSONException je){
    		Toast.makeText(this,"ERROR", Toast.LENGTH_SHORT).show();
     
     
    	}
    masque ton erreur.
    Un catch, à moins que l'exception soit parfaitement prise en compte, devrait toujours contenir la ligne Log.e(TAG, message, e); où TAG est une String permettant de filtrer le LogCat, "message" est un message explicatif de l'opération en cours et "e" est l'exception.

    Dans ton cas, ça a l'air assez clair, tu as une JSONException, donc un problème de parsing. A vu de nez, je dirai que ton objet à l'indice 0 ne contient aucun champ "msg", ou que jArray est vide.

    Pour info, ton code ne fonctionnera pas à partir de Gingerbread, et fera un zouli crash avec une NetworkOnMainThreadException. On ne fait pas d'opération potentiellement longue sur le thread graphique. Tu dois encapsuler tout l'appel réseau dans un thread avec communication Handler ou utiliser plus simplement la classe AsyncTask.
    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

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Hizin Voir le message
    A vu de nez, je dirai que ton objet à l'indice 0 ne contient aucun champ "msg", ou que jArray est vide.
    j'ai exécuté mon code php seul est j'ai en sortie un json ou ya parfaitement une information a l'indice 0.



    Pour info, ton code ne fonctionnera pas à partir de Gingerbread, et fera un zouli crash avec une NetworkOnMainThreadException. On ne fait pas d'opération potentiellement longue sur le thread graphique. Tu dois encapsuler tout l'appel réseau dans un thread avec communication Handler ou utiliser plus simplement la classe AsyncTask.
    je suis novice, pour être franc je n'es rien compris :-/

    en résumé que dois-je faire ? ou bien que dois-je aller lire ? le AsyncTask ?

  6. #6
    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
    Pas de souci d'être débutant, on passe tous par là (et dans un sens, on le reste toujours, plus ou moins).

    La première chose à faire est de mettre des logs dans tes catchs, en suivant ce que j'ai écrit dans mon post précédent. Tu pourras ainsi relancer ton application et la refaire crasher au même endroit, le LogCat (la "console" de sortie Android) aura alors une Stacktrace Java normalement assez explicite qui te donnera une meilleure explication sur le problème. Je te suggère de nous la fournir si tu as du mal à la lire ou que tu ne voit pas le problème.

    La seconde chose, pour l'AsyncTask, est plus complexe. Je ne sais pas ce que tu sais, donc je vais partir de la base.
    Une application est lancée dans un processus, celui-ci pouvant contenir plusieurs thread. Généralement, le processus n'en contient qu'un au lancement, qui est le thread graphique. C'est sur ce thread que sont réalisés toutes les opérations graphiques de ton application, que celle-ci soit en console ou avec GUI (Graphical User Interface). Ainsi, c'est dans ce thread que sont gérés les clics, les effets graphiques, les couleurs, les affichages... bref, tout ce qui est "rendu utilisateur". Ce thread est assez sensible. Un ralentissement sur ce thread entraîne un ralentissement de l'interface graphique, que ce soit au niveau de la prise en compte des actions utilisateur ou au niveau du rendu.

    Partant de ça, il est impératif pour une bonne expérience utilisateur, d'éviter le plus possible que le thread graphique ne soit ralenti ou pire : gelé. Dans ce dernier cas, sur Android, tu auras la crainte "ANR", Appliaction Not Responding, une popup indiquant grosso-modo "l'application XXX ne répond plus, voulez-vous l'arrêter ?". Pour ce faire, chaque opération potentiellement longue (lecture de fichier de taille variable, opérations BDD...) se doit d'être lancée dans un autre thread que le principal le temps de se réaliser, celle-ci notifiant à sa fin le thread graphique pour notifier l'utilisateur (retour quelconque). Dans ce cas, on utilise typiquement un pattern Observer.

    En plus de cela, à partir d'Android 3, le framework lève l'exception NetworkOnMainThreadException si une opération réseau est réalisée sur le thread graphique, faisant crasher l'application.

    Ainsi, pour faire ces opérations en parallèle, on utilise souvent le couple d'objets Thread/Handler, mais Android possède une classe facilitant la mise en place d'opération en arrière-plan avec notification utilisateur : l'AsyncTask.

    Celle-ci est composée de 4 méthodes :
    • onPreExecute() : cette méthode est invoquée automatiquement avant le traitement de la tâche et s'exécute dans le Thread graphique. Elle est typiquement utilisée pour mettre en place un loader.
    • doInBackground(Params... params) : cette méthode est invoquée automatiquement pour le traitement en arrière-plan. C'est elle qui le réalisera.
    • onProgressUpdate(Progress... params) : cette méthode est invoquée à la demande par onPublishProgress(U...) dans le doInBackground. Cette méthode est exécutée sur le thread graphique et permet de notifier l'avancement d'une tâche (à n'utiliser que si celle-ci est mesurable).
    • onPostExecute(Results result) : cette méthode est invoquée automatiquement une fois le doInBackground terminé. Elle s'exécute sur le thread graphique et permet de faire les actions graphique de fin de tâche.


    La documentation de la classe suffit pour comprendre comme l'utiliser : http://developer.android.com/referen...AsyncTask.html
    En prime : http://davy-leggieri.developpez.com/...-thread/#LVI-D
    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

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2014
    Messages : 78
    Points : 47
    Points
    47
    Par défaut
    D'accord j’essayerai tout sa, et je vous tiendrais au courant.
    Merci pour vos réponses.

Discussions similaires

  1. probleme de connexion a une base de donnée
    Par perloutta dans le forum IIS
    Réponses: 2
    Dernier message: 01/05/2009, 11h56
  2. Réponses: 4
    Dernier message: 03/01/2009, 15h26
  3. Probleme de connexion avec une base de données SQL server
    Par lasvegas_parano dans le forum iReport
    Réponses: 29
    Dernier message: 19/07/2007, 10h17
  4. Probleme de connexion a la base de données
    Par Ch'mat dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2006, 15h08
  5. Probleme de connexion a la base
    Par jdeboer dans le forum ASP
    Réponses: 6
    Dernier message: 19/01/2005, 18h51

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