Android HttpClient, DefaultHttpClient, HttpPost
Comment puis-je envoyer une chaîne de données (JSONObject.toString()
) à une url. Je veux écrire une méthode statique dans une classe util pour ce faire. Je veux la signature de la méthode comme suit
public static String postData (String url, String postData) throws SomeCustomException
Quel doit être le format de la chaîne url
La Chaîne de retour est la réponse du serveur en tant que représentation de chaîne de données json.
MODIFIER
Connexion actuelle util
package my.package;
import my.package.exceptions.CustomException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class ConnectionUtil {
public static String postData(String url, String postData)
throws CustomException {
//Create a new HttpClient and Post Header
InputStream is = null;
StringBuilder sb = null;
String result = "";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost();
httppost.setHeader("host", url);
Log.v("ConnectionUtil", "Opening POST connection to URI = " + httppost.getURI() + " url = " + URLDecoder.decode(url));
try {
httppost.setEntity(new StringEntity(postData));
//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
e.printStackTrace();
throw new CustomException("Could not establish network connection");
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
throw new CustomException("Error parsing the response");
}
Log.v("ConnectionUtil", "Sent: "+postData);
Log.v("ConnectionUtil", "Got result "+result);
return result;
}
}
Logcat de sortie
10-16 11:27:27.287: E/log_tag(4935): Erreur de connexion http java.lang.NullPointerException
10-16 11:27:27.287: W/Système.err(4935): java.lang.NullPointerException
10-16 11:27:27.287: W/Système.err(4935): au org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496)
10-16 11:27:27.307: W/Système.err(4935): au org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-16 11:27:27.327: W/Système.err(4935): au org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-16 11:27:27.327: W/Système.err(4935): au en.gharpay.zap.de l'intégration.ConnectionUtil.postData(ConnectionUtil.java:92)
10-16 11:27:27.327: W/Système.err(4935): au en.gharpay.zap.de l'intégration.ZapTransaction$1.doInBackground(ZapTransaction.java:54)
10-16 11:27:27.327: W/Système.err(4935): au en.gharpay.zap.de l'intégration.ZapTransaction$1.doInBackground(ZapTransaction.java:1)
10-16 11:27:27.327: W/Système.err(4935): au android.os.AsyncTask$2.appel(AsyncTask.java:185)
10-16 11:27:27.327: W/Système.err(4935): à java.util.de façon concomitante.FutureTask$De Synchronisation.innerRun(FutureTask.java:306)
10-16 11:27:27.327: W/Système.err(4935): à java.util.de façon concomitante.FutureTask.exécuter(FutureTask.java:138)
10-16 11:27:27.327: W/Système.err(4935): à java.util.de façon concomitante.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-16 11:27:27.327: W/Système.err(4935): à java.util.de façon concomitante.ThreadPoolExecutor$Par Travailleur.exécuter(ThreadPoolExecutor.java:581)
10-16 11:27:27.327: W/Système.err(4935): à java.lang.Fil de discussion.exécution(Thread.java:1019)
10-16 11:27:27.327: V/log_tag(4935): impossible d'établir une connexion réseau
Je pense qu'il y a un problème avec votre méthode POST envoi StringEntity à la fin du serveur.. découvrez ma dernière réponse et voir si cela fonctionne..
OriginalL'auteur kapad | 2012-10-16
Vous devez vous connecter pour publier un commentaire.
Je pense que dans ton code, le problème de base est causée par la façon dont vous utilisez
StringEntity
àPOST
paramètres de votre url. Vérifiez pour voir si le code suivant permet de poster vos données sur le serveur à l'aide deStringEntity
.Espérons que cela vous aide dans la résolution de votre problème. Merci.
http://xyz.mysite.com/some_page.php/
et les données post. Ai-je besoin de spécifier aussi le port?Oui.. Si vous utilisez un port spécifique, vous devez le spécifier aussi...
Juste à l'aide de 80. Donc ça devrait être par défaut. C'est maintenant, de travail et de frapper le serveur. Je vous remercie.
Vous êtes les bienvenus. Veuillez upvote si il a aidé..
OriginalL'auteur Shekhar Chikara
Bien, voici mes pensées sur votre question:-
Tout d'abord, vous devez simplement envoyer les données au serveur en utilisant
POST
méthode. Il est facile et tout à fait possible dans Android aussi. Un simple extrait de code pour l'envoi dePOST
les données peuvent être:Le code ci-dessus envoie des données à un script PHP
postdata
sur votre serveur.Prochaine, pour l'analyse de la
JSON
les données envoyées par le serveur, vous pouvez utiliser unJSONParser
et ensuite facilement les utiliser selon vos besoins. Vous pouvez obtenir la réponse retourné par le serveur en utilisant le code suivant:Espère que cette aide. Merci.
Même pour l'envoi d'une chaîne de données, vous devez envoyer envoyer des données au serveur. Donc, vous n'avez pas besoin d'utiliser un formulaire pour l'envoi d'une chaîne de données sur le serveur. Et si tout simplement, vous voulez juste pour envoyer des commandes comme passer juste un paramètre à un serveur, vous pouvez aussi penser à l'aide de la méthode GET. Je peux vous aider à OBTENIR trop.
Je fais presque la même chose. Au lieu de passer un
UrlEncodedFormEntity
je suis de passage d'unnew StringEntity
avec ma Chaîne de données. Je reçois unNullPointerException
. Juste en ajoutant mon logcat sortie à la question.Oui, plz ajouter votre LogCat de sortie ici.. Et je ne suis pas en mesure d'obtenir de vous, comment êtes-vous en passant un StringEntity?? S'il vous plaît ajouter votre code qui effectue cette tâche.. Qui va les aider dans la compréhension de votre problème dans une meilleure façon..
OriginalL'auteur Shekhar Chikara
essayez d'utiliser cette méthode de strJsonRequest est la chaîne json que vous souhaitez afficher, puis le strUrl est l'url vers laquelle vous souhaitez publier le strJsonRequest
et la méthode convertStreamToString() est comme ci-dessous
converStreamToString
?quel doit être le format de l'url? Je suis un
MalformedURLException
ne suis pas sûr de ce qui est l'url que vous obtenez dans le logcat une fois de vérifier si son les même que vous avez passé
OriginalL'auteur G_S
Selon la façon dont votre code côté serveur est mis en place, un exemple de format de l'url de votre serveur a une page php pour gérer les appels de l'API serait:
Si vous utilisez une connexion poste vous pouvez simplement dire:
et passer vos paramètres post c'est à dire la chaîne json
Voici un excellent tutoriel sur la façon de le faire:
http://yoururl.com/demo.php?jsondata=postData
http://www.example.com/my_page.php
, droit?OriginalL'auteur Anup Cowkur