Android JSON HttpClient zum Senden von Daten an PHP-Server mit HttpResponse

Ich bin versucht derzeit, um Daten zu senden, aus-und Android-Anwendung auf einem php-server (beide sind von mir kontrolliert).

Gibt es eine Menge der gesammelten Daten über ein Formular in der app, dieser wird in die Datenbank geschrieben. Dies alles funktioniert.

In meinem main-code, zunächst möchte ich erstellen ein JSONObject (habe ich schneiden Sie es nach unten hier für dieses Beispiel):

JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");

Weiter, ich pass das Objekt über die für das senden und empfangen der Antwort:

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();
}

Den HTTPPoster Klasse:

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;
}

Diese eine Antwort bekommt, aber der server ist wieder eine 403 - Forbidden Antwort.

Ich habe versucht, die änderung der doPost-Funktion ein wenig (das ist tatsächlich ein wenig besser an, als ich sagte, ich habe eine Menge zu senden, im Grunde 3, der die gleiche form mit verschiedenen Daten - so erstelle ich 3 JSONObjects, eins für jedes Formular-Eingabe - die Einträge kommen von der DB anstelle der statischen Beispiel, das ich verwende).

Zunächst änderte ich den Anruf über ein bisschen:

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, damit die änderungen in der doPost-Funktion:

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, So ist dies eine Antwort zurück, 200

int statusCode = re.getStatusLine().getStatusCode();

Jedoch die empfangenen Daten auf dem server nicht analysiert werden kann, um einen JSON-string. Es ist schlecht formatiert, ich denke, (dieses ist das erste mal, das ich verwendet habe, JSON):

Wenn in der php-Datei mache ich ein echo $_POST ["Fahrzeug"] bekomme ich die folgende:

{\"date\":\"today\",\"engineer\":\"me\"}

Kann mir jemand sagen, wo ich bin, was falsch läuft, oder ob es einen besseren Weg, das zu erreichen, was ich versuche zu tun? Hoffentlich die oben genannten Sinn macht!

InformationsquelleAutor der Frage Scoobler | 2010-03-29

Schreibe einen Kommentar