Je suis actuellement en train d'essayer d'envoyer des données de et l'application Android à un serveur php (les deux sont contrôlés par moi).Android HttpClient JSON pour envoyer des données au serveur PHP avec HttpResponse
Il y a beaucoup de données collectées sur un formulaire dans l'application, ceci est écrit dans la base de données. Tout cela fonctionne.
Dans mon code principal, d'une part créer un JSONObject (je l'ai coupé ici pour cet exemple):
JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");
Ensuite, je passe l'objet sur pour envoyer et recevoir la réponse:
String url = "http://www.server.com/thisfile.php";
HttpResponse re = HTTPPoster.doPost(url, j);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
la classe HTTPPoster:
public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);
HttpEntity entity;
StringEntity s = new StringEntity(c.toString());
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity = s;
request.setEntity(entity);
HttpResponse response;
response = httpclient.execute(request);
return response;
}
Cela obtient une réponse, mais le serveur renvoie un 40 3 - Réponse interdite. J'ai essayé de changer un peu la fonction de doPost (c'est en fait un peu mieux, comme je l'ai dit j'ai beaucoup à envoyer, fondamentalement 3 du même formulaire avec des données différentes - donc je crée 3 JSONObjects, un pour chaque forme entry - les entrées proviennent de la base de données au lieu de l'exemple statique que j'utilise).
Tout d'abord j'ai changé l'appel sur un peu:
String url = "http://www.myserver.com/ServiceMatalan.php";
Map<String, String> kvPairs = new HashMap<String, String>();
kvPairs.put("vehicle", j.toString());
// Normally I would pass two more JSONObjects.....
HttpResponse re = HTTPPoster.doPost(url, kvPairs);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
Ok, donc les modifications apportées à la fonction doPost:
public static HttpResponse doPost(String url, Map<String, String> kvPairs) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
if (kvPairs != null && kvPairs.isEmpty() == false)
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size());
String k, v;
Iterator<String> itKeys = kvPairs.keySet().iterator();
while (itKeys.hasNext())
{
k = itKeys.next();
v = kvPairs.get(k);
nameValuePairs.add(new BasicNameValuePair(k, v));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
}
HttpResponse response;
response = httpclient.execute(httppost);
return response;
}
Ok Donc, ce retourne une réponse 200
int statusCode = re.getStatusLine().getStatusCode();
Cependant, les données reçues sur le serveur ne peuvent pas être analysées par une chaîne JSON. Il est mal formaté je pense (ce qui est la première fois que je l'ai utilisé JSON):
Si dans le fichier php que je fais un écho sur $ _POST [ « véhicule »] Je reçois le texte suivant:
{\"date\":\"today\",\"engineer\":\"me\"}
Quelqu'un peut-il me dire où je vais mal, ou s'il y a une meilleure façon d'accomplir ce que j'essaie de faire? Espérons que ce qui précède a du sens!
Merci de prendre le temps de documenter votre problème avec la réponse 403. J'ai eu la même chose pendant une semaine et votre poste m'a enfin fait bouger dans la bonne direction! –
@Toran Billups pas un problème, je suis content qu'il vous a aidé !! – Scoobler
Vos variables postent sur votre script PHP correctement. Comment pourriez-vous tirer chaque variable dites «ingénieur» et «carburant» et les insérer dans une base de données MySQL par exemple. Il semble que tout ce que vous pouvez faire est juste d'utiliser la variable '$ _POST ['vehicle'];' Je serais très heureux de recevoir une réponse à cela. – WebDevDanno