使用 JSON 数据从 Android 向服务器发送数据
Posted
技术标签:
【中文标题】使用 JSON 数据从 Android 向服务器发送数据【英文标题】:Sending Data From Android To Server with JSON data 【发布时间】:2012-01-09 04:38:48 【问题描述】:我正在尝试将数据从 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方面有问题.. 谢谢。
【问题讨论】:
【参考方案1】:这不是您的 JSON 所在的位置:
$json = $_SERVER['HTTP_JSON'];
你的意思可能是:
$json = $_POST['HTTP_JSON'];
HTTP_JSON
是您在 Android 应用中为 JSON 提供的 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);
【讨论】:
感谢您的回答。我使用 $_POST 而不是 $_SERVER 但同样的错误:注意:未定义的索引:第 3 行 C:\wamp\www\jsonTest.php 中的 HTTP_JSON。 您的 PHP 脚本没有获取 JSON 数据...发布您将 JSON 发送到服务器的 Android 代码的相关部分。 部分代码://新建HttpClient和Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("localhost:90/jsonTest.php"); JSONObject json = new JSONObject(); try json.put("name", "Irem"); 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 响应 = httpclient.execute(httppost); 我也试过你的最后一个解决方案。但是错误没有改变。 wamp服务器会导致这个问题吗? @iremce - 不,WAMP 不应该有所作为。让我检查一下我的一个 Android 项目,看看你是否在客户端做错了什么。【参考方案2】:由于我不知道java客户端如何发送请求 我会尝试:
print_r($_SERVER);
print_r($_GET);
print_r($_POST);
弄清楚它是怎么做的。
【讨论】:
【参考方案3】:试试这些行:
httppost.setHeader("Accept", "application/json");
httppost.setHeader("Content-type", "application/json");
【讨论】:
以上是关于使用 JSON 数据从 Android 向服务器发送数据的主要内容,如果未能解决你的问题,请参考以下文章
TCP网络编程-----客户端请求连接服务器向服务器发数据从服务器接收数据关闭连接