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

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

问题描述:

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

<?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方面有问题.. 谢谢。

这不是您的JSON是:

$json = $_SERVER['HTTP_JSON']; 

您可能意味着:

$json = $_POST['HTTP_JSON']; 

哪里HTTP_JSON是你给你的JSON在Android应用的POST变量名。

其余的错误源于json_decode失败,因为您没有成功读取请求中的JSON数据。您可以检查的json_decode的反应,以检查是否成功如下:

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

最后,经过truejson_encode第二个参数,它返回一个关联数组,所以你访问像这样的元素:

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

确保您read the docs为json_encode所以你明白它在做什么。

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

$json = $_POST['jsonpost']; 

由于以下行名称参数“jsonpost”:

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

谢谢回答。我使用了$ _POST而不是$ _SERVER,但是出现了同样的错误:注意:未定义的索引:第3行中的C:\ wamp \ www \ jsonTest.php中的HTTP_JSON。 – iremce

+0

您的PHP脚本没有拾取JSON数据... Post您要将JSON发送到服务器的Android代码的相关部分。 – nickb

+0

代码的一部分://创建一个新的HttpClient和Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(“http:// localhost:90/jsonTest.php”); JSONObject json = new JSONObject(); 尝试json.put(“name”,“Irem”); json.put(“职位”,“学生”); JSONArray postjson = new JSONArray(); (json); postjson.put(json); httppost.setHeader(“json”,json.toString());httppost.getParams()。setParameter(“jsonpost”,postjson); System.out.print(json); HttpResponse response = httpclient.execute(httppost); – iremce

因为我不知道Java客户端如何发送请求 我会尝试:

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

要弄清楚它是如何工作的。

尝试这些行:

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