2012-04-11 36 views
1

我想上传一个jsonarray到服务器,然后得到响应文本来查看服务器对对象做了什么。在Android方面,我有这样的代码:如何让php代码显示我要发送给服务器的内容?

  HttpPost httppost = new HttpPost("http://10.0.0.2/namedate.php");I am 
      HttpClient httpclient = new DefaultHttpClient(); 
      httppost.getParams().setParameter("jsonarray", json_a.toString()); 
      HttpResponse response = httpclient.execute(httppost); 
      String responseText = EntityUtils.toString(response.getEntity()); 
      Log.d("ProviderTester", "The response text is "+ responseText); 
      Log.i("JSONInfo","JSON object: " + json_a.toString()); 

的jsonarray看起来像这样从logcat的:

04-10 21:29:53.293: I/JSONInfo(466): JSON object: ["[name=Mike, datetime=2012-04-10 21:29]","[name=Roger, datetime=2012-04-10 21:29]"] 

目前我只是想呼应的字符串,然后希望以后获得表出来的字符串:

<?php 

    echo $_POST['jsonarray']; 

    ?> 

下面是我从logcat中得到回应:

04-10 22:22:20.033: D/ProviderTester(499): The response text is 

如何解决这个问题,以便我可以看到发送给服务器的jsonarray字符串?

编辑:当我改变我的Android代码到:

  ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      nameValuePairs.add(new BasicNameValuePair("json_a", json_a.toString())); 

      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      String responseText = EntityUtils.toString(response.getEntity()); 

然后我得到的logcat以下响应使用公认的答案为PHP脚本:

04-10 23:05:39.833: D/ProviderTester(601): The response text is POST = array (
04-10 23:05:39.833: D/ProviderTester(601): 'json_a' => '[name=Mike, datetime=2012-04-10 21:29]\\",\\"[name=Roger, datetime=2012-03-10 21:29]\\"]\\"]', 
04-10 23:05:39.833: D/ProviderTester(601):) 
04-10 23:05:39.833: D/ProviderTester(601): GET = array (
04-10 23:05:39.833: D/ProviderTester(601):) 
04-10 23:05:39.833: D/ProviderTester(601): request = array (
04-10 23:05:39.833: D/ProviderTester(601): 'Content-Length' => '174', 
04-10 23:05:39.833: D/ProviderTester(601): 'Content-Type' => 'application/x-www-form-urlencoded', 
04-10 23:05:39.833: D/ProviderTester(601): 'Host' => 'graasdfon.hostei.com', 
04-10 23:05:39.833: D/ProviderTester(601): 'Connection' => 'Keep-Alive', 
04-10 23:05:39.833: D/ProviderTester(601): 'User-Agent' => 'Apache-HttpClient/UNAVAILABLE (java 1.4)', 
04-10 23:05:39.833: D/ProviderTester(601): 'Expect' => '100-Continue', 
04-10 23:05:39.833: D/ProviderTester(601):) 
04-10 23:05:39.833: D/ProviderTester(601): 
04-10 23:05:39.833: D/ProviderTester(601): <!-- www.000webhost.com Analytics Code --> 

现在我只需要弄清楚如何处理json_a服务器端。谢谢您的帮助!

回答

0

回声$ _ POST [ 'jsonarray'];

PHP没有办法做非标量数据类型的隐式toString()表示。你需要做一个明确的转换。

例如如果你想看到所有的HTTP变量和请求头,你可以试试:

<?php 

$out="POST = " . var_export($_POST, true) . "\n"; 
$out.="GET = " . var_export($_GET, true) . "\n"; 
$out.="request = " . var_export(getallheaders(), true) . "\n"; 
print $out; 

?> 

(这不会挑上写到标准输入的内容,但不能正确encloded作为POST)

+0

感谢您的帮助!任何想法如何从json_a服务器端获取信息? – Stagleton 2012-04-12 14:15:26

+0

http://php.net/manual/en/function.json-decode.php – symcbean 2012-04-13 08:02:06

1

我不知道是什么原因造成您的问题(我不知道的Android/Java的),但调试这将是简单地在这个PHP的最佳方法:

<?php 
    var_dump($_POST); 
?> 

这将导致PHP输出通过POST收到的所有内容。

0

您需要在帖子的实体中传递json值。试试这个:

StringEntity params =new StringEntity(json_a.toString()); 
httppost.addHeader("content-type", "application/x-www-form-urlencoded"); 
httppost.setEntity(params); 

相反的:

httppost.getParams().setParameter("jsonarray", json_a.toString()); 
+0

嗯,我尝试了使用所有不同的PHP配置的方法,响应文本是:array(0){} – Stagleton 2012-04-12 13:51:47

+0

使用Fiddler检查请求是否正确发送。 – SiN 2012-04-12 15:08:51