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 d’exécution sur Android


Sujet :

Android

  1. #1
    Membre à l'essai
    Femme Profil pro
    INFORMATIQUE
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : INFORMATIQUE
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Points : 19
    Points
    19
    Par défaut problème d’exécution sur Android
    bonsoir,

    j'aimerais avoir la liste des fichier, existants dans le dossier www du easyphp, sous forme d'un ArrayList mais le problème c'est que rien s'affiche dans l'écran Android.

    pouvez_vous m'aider

    Cordialement

    voici mon code 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
    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
    102
    103
     
    package com.fichier;
     
     
    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.ListActivity;
    import android.net.ParseException;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.Toast;
    public class FichierActivity 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:8888/file.php");
     
     
           // nameValuePairs.add(new BasicNameValuePair("username", "Peyton"));
           // nameValuePairs.add(new BasicNameValuePair("password", "123"));
     
     
            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.toString());  //.getString("fichier"));
                       //r.add(json_data.getString("categorie"));
     
                   }
     
                    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());
           }
     
        }
    }

    et le code php:

    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
     
    <?php
    $dir_nom = '.'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers
     
    while($element = readdir($dir)) {
    	if($element != '.' && $element != '..') {
    		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
    		else {$dossier[] = $element;}
    	}
    }
     
    closedir($dir);
     
    if(!empty($dossier)) {
    	sort($dossier); 
     
    	}
     
    if(!empty($fichier)){
    	sort($fichier);
    	 }
     
    print(json_encode($fichier));
     
    ?>

  2. #2
    Inactif
    Homme Profil pro
    Marchand de glace
    Inscrit en
    Mai 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Marchand de glace
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2012
    Messages : 88
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    As tu testé ton script php depuis Easy php ? savoir si il renvoie bien la liste des fichiers !
    As tu une erreur dans ton log cat ? La variable donnees est elle vide ?

  3. #3
    Membre habitué Avatar de linked
    Profil pro
    Développeur Android
    Inscrit en
    Mai 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Mai 2008
    Messages : 88
    Points : 133
    Points
    133
    Par défaut
    Essaye de mettre un peu plus de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.d("tag","les variables à differentes étapes");
    dans ton code pour cibler un peu plus le problème.
    Applications et jeux gratuits sur http://www.kamaxandroid.com

  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
    Il y a plein de problèmes dans le code montré:

    1. Le logging...
    La fonction "toString()" de l'exception ne va sortir qu'un texte simple...
    Pour afficher à l'écran (Toast), il vaut mieux utiliser la fonction e.getLocalizedMessage()
    Pour afficher dans les logs (Log.xxxx(...)) il faut ne *RIEN* faire, et passer l'exception à la fonction de log... Pourquoi ? parceque le log va pouvoir afficher la stack-trace de l'exception...

    Donc remplacer tous les Log.i(TAG,"Message "+e.toString()) en:
    Log.i(TAG,"Message",e);
    Ensuite, nous dire si il y a quelque chose dans le logcat.

    2. La conversion en string de la réponse.
    Je sais qu'on trouve (hélas) ce bout de code sur Internet... mais httpcomponents 4 propose une fonction toute simple qui non seulement vous évite de réinventer la roue et de faire des erreurs en copiant du code permet aussi d'avoir un code qui fonctionne (par exemple le code "à la main" de lecture du InputStream ne tient absolument pas compte du character-encoding de la réponse...).
    La fonction est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HttpEntity entity = response.getEntity();
    String entityAsString = EntityUtils.toString(entity);
    Et oui !

    3. Utilisation de fonctions "lentes" (réseaux) dans le thread UI.
    Le thread UI doit être rapide, et donc ne doit jamais faire d'appels potentiellement lents, en particulier des appels HTTP.
    Ceci est d'autant plus vrai sous Android 3.x+ ou l'application crashera avec un "NetworkInUiThreadException"....

    4. Mauvaise utilisation des try/catch.
    Les try/catch ne servent pas à gérer les exceptions, mais à protéger du code... Si une exception se produit dans le bloc try et qu'elle est catchée, alors le programme continuera après le bloc try... Ce n'est clairement pas ce qu'on veut ici!
    Si une exception à lieu dans la requête, il y a fort peu de chances qu'on veuille lire la réponse ! etc ... etc...
    Un seul try / catch suffirait donc autour de tout le code !

    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
     
        try {
            //commandes httpClient
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2:8888/file.php");
     
            // nameValuePairs.add(new BasicNameValuePair("username", "Peyton"));
            // nameValuePairs.add(new BasicNameValuePair("password", "123"));
     
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
     
            String entityStr = EntityUtils.toString(entity);
            JSONArray array = new JSONArray(entityStr);
            ....
        } catch (Exception ex) {
            Log.e(MON_APP,"Failed to read from server",ex);
            String display = getString(R.string.error_message,ex.getLocalizedMessage());
            Toast.makeToast(... , display, ...).show();
        }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 89
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Il y a plein de problèmes dans le code montré:

    1. Le logging...
    La fonction "toString()" de l'exception ne va sortir qu'un texte simple...
    Pour afficher à l'écran (Toast), il vaut mieux utiliser la fonction e.getLocalizedMessage()
    Pour afficher dans les logs (Log.xxxx(...)) il faut ne *RIEN* faire, et passer l'exception à la fonction de log... Pourquoi ? parceque le log va pouvoir afficher la stack-trace de l'exception...

    Donc remplacer tous les Log.i(TAG,"Message "+e.toString()) en:
    Log.i(TAG,"Message",e);
    Ensuite, nous dire si il y a quelque chose dans le logcat.

    2. La conversion en string de la réponse.
    Je sais qu'on trouve (hélas) ce bout de code sur Internet... mais httpcomponents 4 propose une fonction toute simple qui non seulement vous évite de réinventer la roue et de faire des erreurs en copiant du code permet aussi d'avoir un code qui fonctionne (par exemple le code "à la main" de lecture du InputStream ne tient absolument pas compte du character-encoding de la réponse...).
    La fonction est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HttpEntity entity = response.getEntity();
    String entityAsString = EntityUtils.toString(entity);
    Et oui !

    3. Utilisation de fonctions "lentes" (réseaux) dans le thread UI.
    Le thread UI doit être rapide, et donc ne doit jamais faire d'appels potentiellement lents, en particulier des appels HTTP.
    Ceci est d'autant plus vrai sous Android 3.x+ ou l'application crashera avec un "NetworkInUiThreadException"....

    4. Mauvaise utilisation des try/catch.
    Les try/catch ne servent pas à gérer les exceptions, mais à protéger du code... Si une exception se produit dans le bloc try et qu'elle est catchée, alors le programme continuera après le bloc try... Ce n'est clairement pas ce qu'on veut ici!
    Si une exception à lieu dans la requête, il y a fort peu de chances qu'on veuille lire la réponse ! etc ... etc...
    Un seul try / catch suffirait donc autour de tout le code !

    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
     
        try {
            //commandes httpClient
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2:8888/file.php");
     
            // nameValuePairs.add(new BasicNameValuePair("username", "Peyton"));
            // nameValuePairs.add(new BasicNameValuePair("password", "123"));
     
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
     
            String entityStr = EntityUtils.toString(entity);
            JSONArray array = new JSONArray(entityStr);
            ....
        } catch (Exception ex) {
            Log.e(MON_APP,"Failed to read from server",ex);
            String display = getString(R.string.error_message,ex.getLocalizedMessage());
            Toast.makeToast(... , display, ...).show();
        }
    Votre post m'a aidé à ameliorer mon code moi aussi
    J'ajoute juste qu'au point 3. Utilisation de fonctions "lentes" (réseaux) dans le thread UI, l'utilisation des AsyncTask est interessante pour y remedier.

  6. #6
    Membre à l'essai
    Femme Profil pro
    INFORMATIQUE
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : INFORMATIQUE
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    bonsoir,

    merci pour vos réponse, mais malheuresement j'arrive pas à avoir l'execution!!!!!!! des autres erreurs sont intervient

    s'il vous plait Mr abablex, est ce tu peux me donner le code java si tu arrive à le corriger et l'executer???

    c'est trés important, aider_moi

    Cordialement

  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
    On veut bien t'aider, mais dans ce cas il nous faudrait le code actuel, et surtout les erreurs du logcat (avec la stacktrace bien sur).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Problème d’exécution sous android
    Par feriela dans le forum Android
    Réponses: 4
    Dernier message: 16/03/2013, 17h21
  2. Problème installation application sur Android
    Par Syberi@ dans le forum Android
    Réponses: 7
    Dernier message: 07/05/2012, 12h11
  3. Problème de payement Paypal sur Android
    Par zinebmedia dans le forum Android
    Réponses: 0
    Dernier message: 21/12/2011, 19h02
  4. Problème pour installer Android sur Eclipse
    Par gueyebaba dans le forum Android
    Réponses: 8
    Dernier message: 12/10/2011, 01h52
  5. Réponses: 0
    Dernier message: 24/09/2010, 14h00

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