使用JSON数据将数据从Android发送到服务器

我正在尝试从Android应用程序发送数据到Web服务器。 我的android应用程序正在成功。但是PHP代码有问题。

<?php $json = $_SERVER['HTTP_JSON']; echo "JSON: \n"; var_dump($json); echo "\n\n"; $data = json_decode($json,true); echo "Array: \n"; var_dump($data); echo "\n\n"; $name = $data['name']; $pos = $data['position']; echo "Result: \n"; echo "Name : ".$name."\n Position : ".$pos; ?> 

错误:

 Notice: Undefined index: HTTP_JSON in C:\wamp\www\jsonTest.php on line 2 ( line 2 : $json = $_SERVER['HTTP_JSON']; ) 

我找不到这些问题的原因。 你可以帮我吗 ? (注意:我正在使用wamp服务器)

这里是相关的Android源代码:

 // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("10.0.2.2:90/jsonTest.php";); JSONObject json = new JSONObject(); try { json.put("name", "flower"); json.put("position", "student"); JSONArray postjson=new JSONArray(); postjson.put(json); httppost.setHeader("json",json.toString()); httppost.getParams().setParameter("jsonpost",postjson); System.out.print(json); HttpResponse response = httpclient.execute(httppost); if(response != null) { InputStream is = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } text = sb.toString(); } tv.setText(text); }catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } 

此代码在Android端成功工作(没有错误)。 但PHP方面有问题..谢谢。

Solutions Collecting From Web of "使用JSON数据将数据从Android发送到服务器"

这不是你的JSON的地方:

 $json = $_SERVER['HTTP_JSON']; 

你可能意思是:

 $json = $_POST['HTTP_JSON']; 

其中, HTTP_JSON是您在Android应用中向您的JSON提供的POSTvariables名称。

其余的错误源于json_decode失败的事实,因为你没有成功地从请求中读取JSON数据。 你可以检查json_decode的响应来检查它是否成功,如下所示:

 $data = json_decode($json,true); if( $data === NULL) { exit( 'Could not decode JSON'); } 

最后,将true作为第二个parameter passing给json_encode意味着它将返回一个关联数组,所以你可以像这样访问元素:

 $name = $data['name']; $pos = $data['position']; 

确保你阅读了 json_encode 的文档 ,以便了解它在做什么。

编辑:您的问题是,您正在访问$_POST参数错误的名称。 你应该使用:

 $json = $_POST['jsonpost']; 

由于下面的行命名参数“jsonpost”:

 httppost.getParams().setParameter("jsonpost",postjson); 

由于我不知道如何Java客户端发送请求,我会尝试:

 print_r($_SERVER); print_r($_GET); print_r($_POST); 

弄清楚它是如何做的。

试试这些行:

 httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-type", "application/json");