Comment diffuser un objet JSON pour un HttpURLConnection requête POST
Je ne vois pas quel est le problème avec ce code:
JSONObject msg; //passed in as a parameter to this method
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setUseCaches(false);
httpCon.setRequestProperty( "Content-Type", "application/json" );
httpCon.setRequestProperty("Accept", "application/json");
httpCon.setRequestMethod("POST");
OutputStream os = httpCon.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
msg.write(osw);
osw.flush();
osw.close();
os.close(); //probably overkill
Sur le serveur, je suis pas publier de contenu à tous, une chaîne de longueur zéro.
Je sais que cela semble étrange, mais le JSONObject classe a une méthode d'écriture qui vous passez un objet Writer, et la classe écrit lui-même dans le flux. C'est beaucoup plus efficace que la conversion d'une chaîne, puis l'écriture de la chaîne. Qui n'a pas vraiment faire une différence dans cette situation, nous pourrions vapeur rien à l'Écrivain et le test est le même. L'erreur est sur la connexion.
OriginalL'auteur AgilePro | 2014-02-23
Vous devez vous connecter pour publier un commentaire.
Essayer
à envoyer des données.
pour récupérer des données à essayer:
Oui, le "connect" semblait le fixer (ce qui est étrange, parce que le serveur a REÇU une demande, de sorte qu'une connexion a été faite, mais apparemment "se connecter" en fait, envoie le corps? Sont-il des contraintes sur l'endroit où se connecter a faire? Après les en-têtes et avant getOutputStream?
JavaDoc dit "URLConnection objets de passer par deux phases: d'abord, ils sont créés, alors qu'ils sont connectés. Après avoir été créé, et avant d'être connecté, différentes options peuvent être spécifiées (par exemple, doInput et UseCaches). Après la connexion, c'est une erreur d'essayer de les définir. Les opérations qui dépendent d'être connecté, comme getContentLength, sera implicitement effectuer la connexion, si nécessaire.". Peut-être fermer() force un connect (), mais la méthode flush() est beaucoup trop tôt? En outre, même close() sur l'OSW est déjà déclenchée.
OriginalL'auteur Yser
HttpURLConnection
est lourd à utiliser. Avec DavidWebb, un petit wrapper autour de HttpURLConnection, vous pouvez l'écrire comme ceci:Si vous ne l'aimez pas, il y a une liste d'autres bibliothèques sur le lien fourni.
Pourquoi devrions-nous tous d'écrire le même code réutilisable tous les jours? BTW le code ci-dessus est plus lisible et moins sujette aux erreurs.
HttpURLConnection
a une interface horrible. Ce doit être enveloppé!Il a l'air très intéressant et je pense que je vais faire un essai en raison de la facilité de la compression GZIP. Mais je ne trouve rien sur la prise en charge de streaming JSON
Jetez un oeil à la question. Merci @realavaloro. Si nous pouvons trouver une solution, je vais mettre à jour la réponse.
wow, est très joli et simple. Comment puis-je obtenir le HTTP(s) de répondre de code? comme 200, 401..?
vous pouvez accéder code d'état, et d'autres choses comme dans cet exemple,/test
OriginalL'auteur hgoebl
appel de cette methopd dans doitbackground dans asynctask
OriginalL'auteur Mahadev Dalavi
Suivre cet exemple:
OriginalL'auteur Pablo Rodriguez Bertorello
ce sans Chaîne json publier des données au serveur
OriginalL'auteur Mahadev Dalavi