将JSON从Android发送到PHP Server

时间:2013-07-26 09:41:03

标签: php android json

大家好我已经向php服务器发送了一个JSON对象。我的json如下 -

        {"cart_detail":{"product_id":"66922","ref_id":"chand09","user_id":"1"}}

我通过以下代码发送JSON -

      public void postData(String result,JSONObject obj) {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpParams myParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(myParams, 10000);
    HttpConnectionParams.setSoTimeout(myParams, 10000);
    System.out.println(" before JSON string");
    String json=obj.toString();

    try {

        HttpPost httppost = new HttpPost(result.toString());
        httppost.setHeader("Content-type", "application/json");
        System.out.println("After httpost header");
        StringEntity se = new StringEntity(obj.toString());   
        System.out.println(" sending json string"+se);
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        httppost.setEntity(se); 

        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();

        String temp = EntityUtils.toString(response.getEntity());

          System.out.println(" i am getting response entity "+entity);


        Log.i("tag", temp);
        System.out.println(" item send sucessfully to cart by server");

    } catch (ClientProtocolException e) {

    } catch (IOException e) {
    }
}

我处理响应的PHP是 -

      $data = array("cart_details" => array($_REQUEST));
       echo "<pre>";
       print_r($data);
       echo "</pre>";

作为回应我得到了堆栈 - 跟踪如下 -

    07-26 14:57:45.124: I/System.out(7191):  i am getting response entity org.apache.http.conn.BasicManagedEntity@405d2fd0
    07-26 14:57:45.124: I/System.out(7191):  i am getting response string org.apache.http.impl.client.ClientParamsStack@405134a8
   07-26 14:57:45.124: I/tag(7191): <pre>Array
   07-26 14:57:45.124: I/tag(7191): (
   07-26 14:57:45.124: I/tag(7191):     [cart_details] => Array
   07-26 14:57:45.124: I/tag(7191):         (
  07-26 14:57:45.124: I/tag(7191):             [0] => Array
  07-26 14:57:45.124: I/tag(7191):                 (
  07-26 14:57:45.124: I/tag(7191):                 )
   07-26 14:57:45.124: I/tag(7191):         )
   07-26 14:57:45.124: I/tag(7191): )
   07-26 14:57:45.124: I/tag(7191): </pre>
  07-26 14:57:45.124: I/System.out(7191):  item send sucessfully to cart by server

我不知道发生了什么问题。我是json的新手。我将如何检查我的请求是否正常。作为回应我收到同样的json,但为什么这个json是空的?它是android部分还是PHP Server的错误。提前感谢所有人。

2 个答案:

答案 0 :(得分:1)

您正在发送JSON编码的POST正文,因此您必须从输入流中读取:

$data = array("cart_details" => json_decode(file_get_contents('php://input')),
echo "<pre>";       
print_r($data);
echo "</pre>";

$ _REQUEST和$ _POST数组只会填充urlencoded表单数据。

答案 1 :(得分:-1)

您必须在PHP中解码JSON字符串,以便在PHP中正确理解

$data = json_decode($_REQUEST);
echo '<pre>' . print_r($data, true) . '</pre>';

我希望json数据作为命名数组项传递给PHP $ _RESUEST / $ _ POST / $ _ GET数组。 可能值得print_r'整个$ _REQUEST数组,以查看它的第一个被调用的函数。

echo '<pre>' . print_r($REQUEST, true) . '</pre>';

然后将正确的数组项添加到原始转储

$data = json_decode($_REQUEST['array_item_name']);
echo '<pre>' . print_r($data, true) . '</pre>';