这是我第一次使用JSON开发PHP站点并使用Android设备的在线数据库,我的问题是我不知道为什么我的脚本会返回null
,我还没有发送任何变量都可以。
我的PHP代码是:
<?php
$data = file_get_contents('php://input');
$json = json_decode($data, true);
var_dump($json);
?>
问题是:收集Android设备发送给我的php的JSON数据的方法是什么?
如果有人问这是我从Android设备发送数据到php的方式:
在我的Android应用程序中,我以这种方式发送JSON对象:
HttpResponse response =null;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpConnectionParams.setSoTimeout(httpClient.getParams(), 5000);
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),3000);
HttpPost request = new HttpPost(url);
StringEntity se = new StringEntity(json.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
try{
response = httpClient.execute(request);
}catch(SocketException sE)
{
throw sE;
}
我从我的Android代码发送的数据结构如下:
JSONObject json = new JSONObject();
try {
json.put("user", 0);
json.put("status", "Confirmed");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:1)
由于Mike Miller的评论,我找到了问题的解决方案。
问题不在PHP中,是在Android应用程序中,因为我没有从Android设备发送任何内容。
所以正确的解决方案就是那个:
HttpResponse response =null;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpConnectionParams.setSoTimeout(httpClient.getParams(), 5000);
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),3000);
HttpPost request = new HttpPost(url);
//Adding a header for the string
request.setHeader("json", json.toString());
StringEntity se = new StringEntity(json.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
//adding the StringEntitu to the request
request.setEntity(se);
try{
response = httpClient.execute(request);
}
catch(SocketException sE)
{
Log.e("SocketException", sE+"");
throw sE;
}
非常感谢每一位帮助我的人!
答案 1 :(得分:0)
您正在使用POST方法。
所以你的php代码应该是:
<?php
$input = $_POST['some_field_name'];
$json = json_decode($data, true);
var_dump($json);
?>
元素的名称取决于POSTed数据的结构。
请注意,此脚本将在服务器上运行,因此除非您的Android应用正在接收响应并显示响应,否则您不会看到任何事情发生。
在您进行一些调试之前,您可能希望将数据写入文件,或者存储在您发布的数据所需的任何内容中。
当然,有很多工具可以从curl到各种可用于测试API的Web插件。作为一个建议,我已经从Chrome应用程序&#34; Postman&#34;中获得了很多里程。