Json not working with HttpPost probably around set

2020-04-12 08:55发布

I am using this code to send this to my php file. The file looks what is coming like this.

file_put_contents('dump.txt', "POST: \n" . print_r($_POST, true) . "\n\n\n GET: \n" . print_r($_GET, true));

I am sending the json like this:

public void postData(String url,JSONObject json) {
    HttpClient httpclient = new DefaultHttpClient();
    String object = "?data=" +json.toString();
    System.out.println("object:" + object);
    try {
        HttpPost httppost = new HttpPost(url.toString());
        httppost.setHeader("Content-type", "application/json");
        System.out.println("url:" + url.toString());
        StringEntity se = new StringEntity(object); 
        System.out.println("json:" + json.toString());

        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        httppost.setEntity(se); 

        HttpResponse response = httpclient.execute(httppost);
        String temp = EntityUtils.toString(response.getEntity());
        System.out.println("response:" + response);

        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("Statuscode " + statusCode);

        if(statusCode==200) {
            Toast.makeText(LbsGeocodingActivity.this, "Verstuurd",  Toast.LENGTH_LONG).show();
        }
        else if(statusCode!=200) {
            Toast.makeText(this, statusCode, Toast.LENGTH_LONG).show();
        }
        /* try {
                String responseBody = EntityUtils.toString(response.getEntity());
        Toast.makeText(this, responseBody, Toast.LENGTH_LONG).show();
        } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }*/
    } 
    catch (ClientProtocolException e) {

    } 
    catch (IOException e) {
    }
}

The log files are this:

01-08 09:36:00.278: I/System.out(1124): object:?data={"id":"69403","timestamp":"08-01-2013 09:36:00","longitude":"-122.084095","latitude":"37.422005"}
01-08 09:36:00.298: I/System.out(1124): json:{"id":"69403","timestamp":"08-01-2013 09:36:00","longitude":"-122.084095","latitude":"37.422005"}
01-08 09:36:01.038: I/System.out(1124): response:org.apache.http.message.BasicHttpResponse@412d1b38
01-08 09:36:01.038: I/System.out(1124): Statuscode 200

i left out the url for security reasons..

But i am getting an empty file in dump.txt

POST: 
Array
(
)



 GET: 
Array
(
)

EDIT

Something is wrong with the setEntity(or somewhere around there), because when i already paste ?data= in the url i get this from the PHP file:

POST: 
Array
(
)



 GET: 
Array
(
    [data] => 
)

1条回答
干净又极端
2楼-- · 2020-04-12 09:40

the way I send JSON with my DefaultHttpClient in my app work perfectly:

public static HttpUriRequest createPostForJSONObject(
        JSONObject params, String url) {
    HttpPost post = new HttpPost(url);
    post.setEntity(createStringEntity(params));
    return post;
}

private static HttpEntity createStringEntity(JSONObject params) {
    StringEntity se = null;
    try {
        se = new StringEntity(params.toString(), "UTF-8");
        se.setContentType("application/json; charset=UTF-8");
    } catch (UnsupportedEncodingException e) {
        Log.e(TAG, "Failed to create StringEntity", e);
        exception = e;
    }
    return se;
}

in order to run this request in your code all you need to do is this:

public void postData(String url,JSONObject json) {
    HttpClient httpclient = new DefaultHttpClient();
    try {
          HttpPost post = createPostForJSONObject(json, url);
          HttpResponse response = httpClient.execute(post);
          // DO YOUR THING
    } catch Exception {
         // HANDLE EXCEPTION
    }
}
查看更多
登录 后发表回答