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 à un Web Service : Ok sur émulateur // KO sur le mobile


Sujet :

API standards et tierces Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 40
    Points
    40
    Par défaut Connexion à un Web Service : Ok sur émulateur // KO sur le mobile
    Bonjour à tous,

    Je débute en développement d'application sur Android.

    J'ai un Web Service (Rest) et je récupère une liste depuis ma base de données.

    Mon application fonctionne très bien sur l'émulateur mais pas sur mon Mobile

    L'appli plante sur le .execute dans ma MainActivity

    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
     
    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    			miseAJour();
     
    	}
     
      public void miseAJour()  {
    	    	try{
     
    	      DefaultHttpClient client = new DefaultHttpClient();
    	      HttpGet requete = new HttpGet("http://192.168.1.22/rest/users");
    	      HttpResponse reponse = client.execute(requete);
    ....

    Voici le LogCat

    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
     
    03-23 23:16:46.188: E/AndroidRuntime(14427): FATAL EXCEPTION: main
    03-23 23:16:46.188: E/AndroidRuntime(14427): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.questiondecours/com.example.questiondecours.MainActivity}: android.os.NetworkOnMainThreadException
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.ActivityThread.access$600(ActivityThread.java:134)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.os.Looper.loop(Looper.java:154)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.ActivityThread.main(ActivityThread.java:4624)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at java.lang.reflect.Method.invokeNative(Native Method)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at java.lang.reflect.Method.invoke(Method.java:511)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at dalvik.system.NativeStart.main(Native Method)
    03-23 23:16:46.188: E/AndroidRuntime(14427): Caused by: android.os.NetworkOnMainThreadException
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at libcore.io.IoBridge.connectErrno(IoBridge.java:165)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at libcore.io.IoBridge.connect(IoBridge.java:112)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at java.net.Socket.connect(Socket.java:851)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:363)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at com.example.questiondecours.MainActivity.miseAJour(MainActivity.java:66)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at com.example.questiondecours.MainActivity.onCreate(MainActivity.java:33)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.Activity.performCreate(Activity.java:4479)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
    03-23 23:16:46.188: E/AndroidRuntime(14427): 	... 11 more
    Merci de votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java / C++
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java / C++

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 228
    Points
    228
    Par défaut
    Bonsoir sebpern,

    L'erreur est simple et indiqué par le LogCat, l’exception suivante est levé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    android.os.NetworkOnMainThreadException
    Android n'accepte pas que l'utilisation du réseau s'effectue sur le thread principale de l'application.

    La raison est simple, le temps nécessaire à ces connexions n'est pas connue, peut varier de trés courtes à trés longues.... Et de ce fait l'application reste bloqué pendant ce laps de temps. Or, Android considère une application comme étant craché si celle ci ne répond pas pendant 5 secondes, et donc il ferme cette application.

    Cet exception est levé pour nous le rappeler lol!

    Pour régler le problème, il vous faut donc créer un thread gérant les accès réseaux.
    Après, pourquoi est-ce que votre application fonctionne sur votre émulateur? Je ne sais pas, elle ne devrait pas, peut-être utilisez vous une vieille (très vieille) version d'Android sur l'émulateur? (<= là je m'aventure)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Merci de votre réponse rapide et claire.

    J'ai bien compris le problème , il faut que je me penche la dessus pour voir comment créer ce nouveau thread et comment communiquer entre mes 2 threads car si j'ai bien compris je dois faire le .execute dans le nouveau thread mais je dois utisié le résultat dans le premier.



    Merci.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java / C++
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java / C++

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 228
    Points
    228
    Par défaut
    C'est exactement cela!

    Pour les thread, sous Android, il existe plusieurs façon de procéder, je vous en énumère quelques uns ici:
    - AsyncTask
    - Runnable
    - Service

    La liste n'est pas complète (je crois).

    Concernant l'échange d'information entre plusieurs thread, j'ai découvert il y a peu l'existence des Handler. Ils sont un peu compliqué à mettre en place la première fois, mais je les trouves assez pratique, et ils permettent l'envoie de donnée (par relation clé/valeur) entre plusieurs thread.

    quelques tutoriels ou liens utiles:
    Thread, Handler, AsyncTask et fuites mémoire de Mathias Seguy
    L'UI Thread de Davy Leggieri
    Documentation Android Handler
    Documentation Android AsyncTask

    Documentation Android Service

    Documentation Android Runnable

    Je m'arrête là, je pense qu'avec cela vous devriez vous en sortir .

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    ET bien encore merci, un peu de lecture pour un dimanche pluvieux ^^

    Je vais mettre résolu même si ce n'est pas encore le cas en tout cas grâce à vous j'ai ttes les cartes en main pour que cela le soit.

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

Discussions similaires

  1. Question sur connexion sécurisée web service
    Par hades79 dans le forum Services Web
    Réponses: 0
    Dernier message: 13/12/2012, 17h09
  2. [SP-2007] Problème de connexion à un web service
    Par pdau2571 dans le forum SharePoint
    Réponses: 0
    Dernier message: 13/10/2010, 15h32
  3. Connexion InfoPath Web service
    Par fanfan49 dans le forum Services Web
    Réponses: 1
    Dernier message: 06/06/2007, 23h13
  4. Connexion InfoPath Web service
    Par fanfan49 dans le forum SharePoint
    Réponses: 1
    Dernier message: 06/06/2007, 23h13

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