使用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');
}
最后,经过true
为json_encode
第二个参数,它返回一个关联数组,所以你访问像这样的元素:
$name = $data['name'];
$pos = $data['position'];
确保您read the docs为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");
谢谢回答。我使用了$ _POST而不是$ _SERVER,但是出现了同样的错误:注意:未定义的索引:第3行中的C:\ wamp \ www \ jsonTest.php中的HTTP_JSON。 – iremce
您的PHP脚本没有拾取JSON数据... Post您要将JSON发送到服务器的Android代码的相关部分。 – nickb
代码的一部分://创建一个新的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