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 :

Connexion sur Serveur web et parse XML


Sujet :

API standards et tierces Android

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut Connexion sur Serveur web et parse XML
    Bonjour ,
    etant débutant en android , je cherche à réaliser la tache suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    – connexion au serveur :
    $ curl -c cookies.txt –data "action=connect&login=toto&password=toto" openxum.org/android/index.php
    – récupération du nombre max :
    $ curl -b cookies.txt openxum.org/android/index.php ?action=get_max
    – sauvegarde du score :
    $ curl -b cookies.txt –data "action=score&value=10" http ://openxum.org/android/index.php
    Ces tests vous permettent de voir les requêtes à réaliser. L’option –data indique que la requête est au format POST. Les autres sont au format GET.
    2
    Dans mon code java de mon activité principale j'ai fait ceci :

    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
    if(connection == true){
    			String temp = null;
    			HttpResponse response = null;
    			Document doc = null;
     
    			DefaultHttpClient client = new DefaultHttpClient ();
    	        HttpPost request = new HttpPost ("http://openxum.org/android/index.php");
    	        List< NameValuePair > nameValuePairs = new ArrayList < NameValuePair >();
    	        nameValuePairs.add( new BasicNameValuePair("action", "connect" ));
    	        nameValuePairs.add( new BasicNameValuePair("login", "toto"));
    	        nameValuePairs.add( new BasicNameValuePair("password", "toto"));
    	        try {
    				request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    			} catch (UnsupportedEncodingException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			try {
    				response = client.execute( request );
    			} catch (ClientProtocolException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    	        DocumentBuilder builder = null;
    			try {
    				builder = factory.newDocumentBuilder();
    			} catch (ParserConfigurationException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
     
    			try {
    				doc = builder.parse( response.getEntity().getContent ());
    			} catch (IllegalStateException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (SAXException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	        Element root = doc.getDocumentElement();
    	        if ( root.getNodeName().compareTo("status") == 0) {
    	            temp = root.getAttributes().getNamedItem("value").getNodeValue();
    	        }
     
    		}
    Mais je me prends une erreur 500. (Donc serveur ... )
    Pouvez vous m'aider dans les étapes que j'ai décrite au dessus svp .

    Merci

  2. #2
    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
    Première question:
    D'ou sortent tous ces try/catch ?

    Là si je lis le code ça veut dire:
    request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    Si ça s'est mal passé, j'écris le nom de l'exception (et c'est tout), et je passe à la suite:
    response = client.execute( request );
    (donc sans 'donnée')
    Si ça s'est mal passé, j'écris le nom de l'exception (et c'est tout), et je passe à la suite:
    ...
    builder = factory.newDocumentBuilder();
    Si ça s'est mal passé, j'écris le nom de l'exception (et c'est tout), et je passe à la suite:
    doc = builder.parse( response.getEntity().getContent ());
    Bim, NullPointerException presque assuré !!!!!
    Puisque la fonction ne marche que si AUCUNE exception n'a lieu, il ne devrait y avoir qu'un seul try/catch ! En fait, si la fonction ne fait que récupérer de la donnée (pas d'affichage), il ne devrait même pas y avoir de try/catch !
    Et SURTOUT, utiliser Log.e(UN_TAG,"Erreur de récupération du score",ex);
    (le ,ex à la fin est très important pour bien avoir toute la trace de l'exception et pas juste son nom)

    Sinon, si le serveur retourne 500, c'est un problème coté serveur (500 = server internal error), pas coté client, donc à priori rien à corriger coté client.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    les try catch , sont là car eclipse voulaient que je les implémente.

    Et oui en effet j'ai une erreur en plus du 500 , pointer null , en gros il doit récuperer des données en effet , en parsant le fichier xml , mais je comprends pas du tout comment m'y prendre pour ça.

    Je ne sais pas en gros par quelles étapes je dois passer , et comment vérifier leurs bon fonctionnements .

    Genre j'ouvre la connection vers le serveur , (j'ai bien défini les autorisations dans le manifest.xml ) je récupere un status de connection me validant celle-ci.

    Apres je vois sur des docs techniques , Documents et nodes ? ... c'est quoi la différence ?

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Bon j'ai modifier mon code , mais ça ne passe toujours pas :"(

    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
    		if(connection == true){
    			String temp = null;
    			HttpResponse response = null;
    			Document doc = null;
     
    			DefaultHttpClient client = new DefaultHttpClient ();
    			HttpPost request = new HttpPost ("http://openxum.org/android/index.php");
    			List< NameValuePair > nameValuePairs = new ArrayList < NameValuePair >();
    			nameValuePairs.add( new BasicNameValuePair("action", "connect" ));
    			nameValuePairs.add( new BasicNameValuePair("login", "toto"));
    			nameValuePairs.add( new BasicNameValuePair("password", "toto"));
     
    			try{
     
    				request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     
    				response = client.execute( request );
    				// création d'une fabrique de documents
    				DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
     
    				// création d'un constructeur de documents
    				DocumentBuilder constructeur = fabrique.newDocumentBuilder();
     
    				// lecture du contenu d'un fichier XML avec DOM
    				Document document = constructeur.parse(response.getEntity().getContent());
     
    				//traitement du document
    				Element root = doc.getDocumentElement();
     
    				if(root.getNodeName().compareTo("status") == 0) {
    					temp = root.getAttributes().getNamedItem("value").getNodeValue();
    					System.out.println("temp = "+temp);
    				}
     
    			}catch(ParserConfigurationException pce){
    				System.out.println("Erreur de configuration du parseur DOM");
    				System.out.println("lors de l'appel à fabrique.newDocumentBuilder();");
    			}catch(SAXException se){
    				System.out.println("Erreur lors du parsing du document");
    				System.out.println("lors de l'appel à construteur.parse(xml)");
    			}catch(IOException ioe){
    				System.out.println("Erreur d'entrée/sortie");
    				System.out.println("lors de l'appel à construteur.parse(xml)");
    			}
    		}
    Je ne sais pas du tout où ça coince.

    J'ai ceci comme erreur quand j'execute le programme :

    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
    10-31 15:15:14.443: E/AndroidRuntime(993): FATAL EXCEPTION: main
    10-31 15:15:14.443: E/AndroidRuntime(993): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.pepimobil/org.pepimobil.ExerciceActivity}: android.os.NetworkOnMainThreadException
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.ActivityThread.access$500(ActivityThread.java:122)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.os.Looper.loop(Looper.java:132)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at java.lang.reflect.Method.invokeNative(Native Method)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at java.lang.reflect.Method.invoke(Method.java:491)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at dalvik.system.NativeStart.main(Native Method)
    10-31 15:15:14.443: E/AndroidRuntime(993): Caused by: android.os.NetworkOnMainThreadException
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at java.net.InetAddress.getAllByName(InetAddress.java:249)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at org.pepimobil.ExerciceActivity.onCreate(ExerciceActivity.java:248)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.Activity.performCreate(Activity.java:4397)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
    10-31 15:15:14.443: E/AndroidRuntime(993): 	... 11 more

  5. #5
    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
    Non mais il faut arrêter avec les System.out.println....
    Franchement, il *faut* utiliser Log.e() avec l'exception en parametre à la fin... (ou Log.i / Log.d / Log.w ... selon la gravité de l'exception)

    sont là car eclipse voulaient que je les implémente.
    Non Eclipse disait que la fonction appelée envoyait une exception non déclarée ,le premier choix est de dire que la fonction appelante envoie elle aussi l'exception
    Le second choix est d'intercepter l'exception, (try/catch) ce qui veut "ok, c'est bon, je gère l'exception moi-même". Non seulement cette solution est compliquée pour eclipse (il ne sait pas trop ou metre le catch) mais nécessite de bien gérer les erreurs dans son code. Laisser Eclipse mettre son code auto sans rien faire revient à dire "ok, c'est bon, je gère pas l'exception et j'en ai rien à faire".

    Pour fini, l'exception que tu reçois est normale... "NetworkOnMainThreadException"...
    Ça veut dire que le code est appelé dans une fonction "UI" (onCreate, onClick, ...)... donc (si pas d'exception) que l'utilisateur pourrait être bloqué au mieux pendant 2/3 seconds (pings/procress/transert) au pire pendant 2/3 minutes... (timeouts) ce qui va probablement d'une part ennuyer l'utilisateur (2/3 seconds c'est lent quand on appuie sur un bouton pour avoir un feedback), d'autre part ennuyer le système (Application Non Responding alerte).
    Pour toutes ces raison, appeler du code "lent/long" dans l'UI est interdit (et pas que sur les smart-phones hein !), pour s'assurer que les programmeurs (même amateurs) ne le fassent vraiment plus, depuis HoneyComb le systeme envoie carrément une exception dans le cas d'utilisation du réseau dans le thread de l'UI.
    Voir les threads / tasks (AsyncTask) pour résoudre le problème.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    En effet je l'appel bien dans mon onCreate(Bundle savedInstanceState). Mais si cela est le problème , il faut que je l'appel où ? du coup.

    Et ok pour les exceptions.

    Merci au passage pour ton aide très utile.

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Ma correction pour les log ... je pense que c'est ce que tu voulais me faire modifier ? :

    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
    if(connection == true){
    			final String tag = "ExerciceActivity";
    			String temp = null;
    			HttpResponse response = null;
    			Document doc = null;
     
    			DefaultHttpClient client = new DefaultHttpClient ();
    			HttpPost request = new HttpPost ("http://openxum.org/android/index.php");
    			List< NameValuePair > nameValuePairs = new ArrayList < NameValuePair >();
    			nameValuePairs.add( new BasicNameValuePair("action", "connect" ));
    			nameValuePairs.add( new BasicNameValuePair("login", "toto"));
    			nameValuePairs.add( new BasicNameValuePair("password", "toto"));
     
    			try{
     
    				request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    				response = client.execute( request );
    				// création d'une fabrique de documents
    				DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
     
    				// création d'un constructeur de documents
    				DocumentBuilder constructeur = fabrique.newDocumentBuilder();
     
    				// lecture du contenu d'un fichier XML avec DOM
    				Document document = constructeur.parse(response.getEntity().getContent());
     
    				//traitement du document
    				Element root = document.getDocumentElement();
     
    				if(root.getNodeName().compareTo("status") == 0) {
    					temp = root.getAttributes().getNamedItem("value").getNodeValue();
    					System.out.println("temp = "+temp);
    				}
     
    			}catch(ParserConfigurationException pce){
    				Log.e(tag, "Erreur de configuration du parseur DOM");
    				Log.e(tag, "Erreur de configuration du parseur DOM");
    				Log.e(tag,"lors de l'appel à fabrique.newDocumentBuilder");
    			}catch(SAXException se){
    				Log.e(tag,"Erreur lors du parsing du document");
    				Log.e(tag,"lors de l'appel à construteur.parse(xml)");
    			}catch(IOException ioe){
    				Log.e(tag,"Erreur d'entrée/sortie");
    				Log.e(tag,"lors de l'appel à construteur.parse(xml)");
    			}
    		}

  8. #8
    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
    Presque

    L'idée est:
    1. D'utiliser le "niveau" (trace, debug, info, warning, error, fatal), pour indiquer le sévérité du problème...
    * Trace: dans une boucle, comportement régulier de l'appli (been there)
    * Debug: dans un cas particulier (if/switch/...)
    * Info: pour indiquer qu'une action particuliere a été réalisée (récupération/sauvegarde de donnée,...)
    * Warning: pour indiquer qu'une erreur s'est produite, mais on va savoir la gérer
    * Error: pour indiquer un comportement non attendu dont on ne peut récupérer
    * Fatal: pour indiquer une erreur définitivement problématique nécessitant un redémarrage complet en général.

    2. D'utiliser le tag comme "marqueur de classe" (ou de "module"). Pour le coup, là c'est tout bon (en général on utilise un private static final TAG = XXXX; dans la classe)

    3. D'utiliser le texte pour dire ce qui a foiré (par exemple "la récupération de donnée")

    4. Utiliser l'exception si il y'en a une en dernier paramètre pour afficher la stack, rendant caduc les textes genre "lors de l'appel à ..."

    Dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                // System.out.println("temp = "+temp);
                Log.i("temp = "+temp);
            }
    }catch(ParserConfigurationException ex){
        // cela ne devrait jamais arriver... utilisation du "What The Fuck !" ^^
        Log.wtf(tag, "Erreur de configuration du parseur DOM",ex);
    } catch(SAXException ex) {
        Log.e(tag,"Erreur lors du parsing du document",ex);
    } catch(IOException ioe) {
        Log.e(tag,"Erreur de connexion",ex);
    }
    Quant au NOMTE, orientes-toi vers les AsyncTask... un tache réalisée en "background"... Si la donnée est nécessaire à l'activité il faudra certainement afficher un fragment de progression le temps que la tache soit finie.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    D'accord , merci pour ton aide ;-) . J'ai comprit comment gérer grace à toi les erreurs de manière hiérarchique.

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Je pense que mon problème suivant est que je ne sais pas si ma machine virtuel android , peux atteindre le net . Tu as une idée pour que je puisse vérifier ?

    J'ai ma méthode connectStatus qui me renvoie true. Mais pas moyen de passer sur le serveur web :'(

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 117
    Points : 219
    Points
    219
    Par défaut
    Salut,
    As tu bien mis ton code dans un asyncTask comme dis plus haut?
    Pour vérifier si tu a accès au net, tu a un explorateur web dans l'émulateur android, tu peut essayer d'atteindre un site comme ca.

    Mon petit blog sans prétention : http://blog.octera.info/

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Salut ,

    J'ai vérifié si j'avais bien une connection au net via le navigateur dans l'émulateur. C'est bien le cas. Maintenant je ne sais pas comment utiliser le asyncTask, je n'ai jamais fait.

    J'ai un copain de master , qui lui à diviser en plusieurs méthodes pour établir la connection afin de pouvoir faire fonctionner le programme.

    J'aimerais que vous puissier m'expliquer comment ça fonctionne le asyncTask.
    En fait je pense que ça reviens a bosser avec des THreads ? ou rien à voir.

  13. #13
    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
    Oui cela revient à bosser avec des threads, sauf que:
    1. Tu n'as pas à gérer les threads en question.
    2. La séparation UI/background-thread est faite pour toi
    3. Gestion du "cancel".

    Voila comment cela se déroule:
    l'UI thread recoit un évenement (click / creation d'activité...).
    On crée alors un objet AsyncTask (il faut en hériter pour pouvoir y coller son code) [dans l'UI thread].
    On démarre l'AsyncTask [UI Thread]
    => AsyncTask.onPreExecute() est appelé (toujours dans l'UI thread)
    l'UI thread termine l'évenement.

    Dans un thread à part (un worker), AsyncTask.doInBackground() est appelée à son tour... dans un thread à part... Pendant ce temps là, l'UI thread peut continuer à réagir aux évenements (click/back/...).
    Quand la fonction doInBackground se termine, un évenement spécial est passé à l'UI thread pour executer la "fin" de l'AsyncTask:

    l'UI thread recoit l'évenement de tâche terminée.
    l'UI thread va appeler AsyncTask.onPostExecute()
    Dans cette fonction on a l'occasion de mettre à jour l'interface avec les résultats du doInBackground...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Ok nicroman, j'ai essayer cela fonctionne , je te remercie pour cette explication. J'ai vue après plusieurs recherches que bcp de développeur en herbe avait déjà posé ce problème. Merci pour avoir repris votre patience . Je mets ce thème en résolu , en tout cas j'ai comprit que c'est essentiel de savoir gérer ce type de Thread. C'est domage que ça doit être vous qui m'expliquiez en ayant payé pour une formation diplômante ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion sur serveur web / base filemaker server
    Par nfechange dans le forum Administration
    Réponses: 15
    Dernier message: 23/02/2015, 22h41
  2. Connexion sécurisée sur serveur web
    Par Jarodd dans le forum Sécurité
    Réponses: 3
    Dernier message: 16/11/2012, 14h39
  3. Connexion https pour récupérer un fichier sur serveur web
    Par benibur dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 07/01/2010, 14h26
  4. Sur Client IE de serveur web lire fichier XML stocké sur poste client
    Par berjaoui dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/06/2008, 12h54
  5. CORBA sur serveur web en local
    Par barberot dans le forum CORBA
    Réponses: 8
    Dernier message: 31/03/2004, 08h28

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