11
votes

Httpurlconnection: java.lang.illegalstateException: déjà connecté

J'essaie d'utiliser httpurlclient pour envoyer des données de poste à un serveur à l'aide de la classe httprestClient ci-dessous. Lors de l'exécution xxx

i get xxx

i désinstalle l'application et obtenez toujours la même erreur.

in Tout l'exemple que j'ai vu OpenConnection est appelé avant setdOnput . Si, comme son nom le suggère, openConnection ouvre une connexion, il ne doit jamais être utilisé avant `setdOnput, non? Qu'est-ce que je manque?

Peut-être à un moment donné, il s'est écrasé avant d'exécuter Disconnect . Cela pourrait-il être la raison? Si oui, comment puis-je déconnecter l'ancienne connexion? xxx


6 commentaires

Vous vous connectez à une connexion qui n'est pas encore déconnectée en raison de la fonction statique que vous utilisez.


Essayez de supprimer conn.Connect (); complètement (vous n'en avez pas besoin). Toujours eu le problème? Si oui, veuillez éditer votre message et montrez-nous la stacktrace.


@ROD_ALGONQUIN Je ne peux voir aucun problème concernant statique .


@hgoebl merci, j'ai supprimé le Conn.connect () inutile ()


@ROD_ALGONQUIN Il semble ne pas être un problème: j'ai essayé d'exécuter plusieurs demandes en même temps en utilisant ma fonction statique et cela a fonctionné, alors je suppose que cela ouvre une connexion différente à chaque fois.


@JUL 'En même temps, n'est même pas physiquement possible;) L'avez-vous utilisé un environnement multithreadé?


3 Réponses :


1
votes

Ce peut être une exception trompeuse. Voir ce défaut de Jersey-2 https://java.net/jira/browse/jerey-2729

Le lien a été mis à jour: https://github.com/jersey/jersey/issues/3001

Fondamentalement, le problème est que Jersey jetait une exception invalide. Le vrai problème dans mon cas était que la connexion a été refusée à partir du serveur.


1 commentaires

Le lien est cassé.



4
votes

Vous avez appelé les deux conn.setdodoinput (true); et conn.setdooutput (true); . Utilisez l'un d'entre eux:

  • setdooutput (true) est utilisé pour POST et Mettez Demandes.
  • setdOnput (true) est utilisé pour obtenir demande.

    La connexion que vous avez faite a été confuse, elle ne peut pas décider quelle requête doit être utilisée.

    dans votre code: xxx


0 commentaires

13
votes

Cela pourrait être dû à des montres tout en débogage dans votre IDE. Voir Cette réponse . Cela m'est arrivé et était difficile à découvrir.


1 commentaires

C'était la réponse pour moi. Merci beaucoup.