PHP处理Android的POST数据
今天用PHP开发Android网络数据接口的时候,发现Thinkphp的I函数(php的$_POST)并不能获取到androidpost过来的数据
Android代码如下:
Map<String,String> map = new HashMap<>();
map.put("itemid",this.itemid);
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.POST,url,new JSONObject(map),new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
try{
if("OK".equals(jsonObject.getString("status"))){
JSONObject returnDdata = jsonObject.getJSONObject("data");
data.clear();
if("out".equals(returnDdata.getString("inout"))){
data.add("类型:支出");
}else{
data.add("类型:收入");
}
data.add("主题:"+returnDdata.getString("info"));
data.add("金额:"+returnDdata.getString("money"));
data.add("时间:"+XLFunc.xl_timestamp_to_datetime(returnDdata.getLong("time")*1000,"yyyy-MM-d"));
data.add("结算:"+returnDdata.getString("result"));
adapter.notifyDataSetChanged();
listVview.setLayoutAnimation(lac);
}else{
XLFunc.xl_toast(DetailActivity.this,jsonObject.getString("data"),0);
}
}catch (JSONException e){
XLFunc.xl_toast(DetailActivity.this,"网络异常!",0);
}
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
XLFunc.xl_toast(DetailActivity.this,"获取详细信息时出现错误!请检查网络是否正常!",0);
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> headers = new HashMap<>();
headers.put("Content-Type","application/json; charset=utf-8");
return headers;
}
};
jor.setShouldCache(false);
this.requestQqueue.add(jor);
headers设置发送了,也没有使用getParams(网上说使用这个方法服务端得不到POST数据,只能重载JSONObjectRequest,另话,在这不提!)
可是PHP端
var_dump($_POST);
为空!
上网查询后,发现使用如下的方式能够获取到POST数据:
$postDdata = file_get_contents('php://input');
$postDdata = json_decode($postDdata, true);
$return = array();
$itemid = intval($postDdata['itemid']);
也就是说使用php://input输入流的方式获取是能获取的,那么也就是说android端已经正常提交数据了,那么问题出现在PHP端了!
由Android提交数据的headers:
headers.put("Content-Type","application/json; charset=utf-8")
可知,Android端发送的是json,
查看PHP关于$_POST的说明:
$HTTP_POST_VARS contains the same initial information, but is not a superglobal. (Note that $HTTP_POST_VARS and $_POST are different variables and that PHP handles them as such)
然后查看$_POST和php://input的区别:
$HTTP_RAW_POST_DATA contains the raw POST data. In general, php://input should be used instead of $HTTP_RAW_POST_DATA.
可知:php://input通常代替$HTTP_RAW_POST_DATA 而$HTTP_RAW_POST_DATA包含原始提交的数据
而POST是过滤掉不能解析的数据,比如json数据!这些过滤掉的数据就放到了$HTTP_RAW_POST_DATA中,所以我们需要使用php://input来获取post过来的json对 数据!
PHP处理Android的POST数据的更多相关文章
- Android课程---关于数据存储的学习(3)之数据库和事务
DataActivity3.java package com.hanqi.test5; import android.content.ContentValues; import android.dat ...
- Android开发-之数据的存储方式一
在Android中,数据的存储分为两种方式: 1.直接以文件的形式存储在目录中 2.以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1.生成.txt文件 2.生成xml文件 那么今天 ...
- Android 数据库管理— — —更新数据
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- Android 数据库管理— — —添加数据
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- android bundle存放数据详解
转载自:android bundle存放数据详解 正如大家所知道,Activity之间传递数据,是将数据存放在Intent或者Bundle中 例如: 将数据存放倒Intent中传递: 将数据放到Bun ...
- android中的数据存取-方式一:preference(配置)
这种方式应该是用起来最简单的Android读写外部数据的方法了.他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单. 透明的方式来保存一些用户个 ...
- 67.Android中的数据存储总结
转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d0 ...
- 【Android】Android 移动应用数据到SD
[Android]Android 移动应用数据到SD 在应用的menifest文件中指定就可以了,在 <manifest> 元素中包含android:installLocation 属性, ...
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- exkmp略解
推导 ext[i]表示母串s[i..lens]和子串t[1..lent]的最长公共前缀. nxt[i]表示t[i..lent]和t[1..lent]的最长公共前缀. 假设ext[1..k]已经算好,现 ...
- OpenStack之Glance源码简析
Glance简介 OpenStack镜像服务器是一套虚拟机镜像发现.注册.检索. glance架构图: Glance源码结构: glance/api:主要负责接收响应镜像管理命令的Restful请求, ...
- http协议学习笔记——状态码
1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议) 请求者已要 ...
- 第一章:前端布局之display属性
css布局学习网站:http://zh.learnlayout.com
- How Ironic Inspector Works
翻译官网概述. 操作员将节点注册为Ironic,例如 通过openstack baremetal CLI命令. 电源管理认证应该在这一步提供给Ironic. 如节点状态所述,节点被置于正确的自省状态. ...
- Leetcode 552.学生出勤记录II
学生出勤记录II 给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量. 答案可能非常大,你只需返回结果mod 109 + 7的值. 学生出勤记录是只包含以下三个字符的字符串: ' ...
- pip更新产生的问题及其解决方法?
运行 pip3 install --upgrade pip 发生错误: from pip import main ImportError: cannot import name 'main' 将以下代 ...
- 【转】unity 移动物体到指定位置的四种方法
http://blog.csdn.net/lcy0221/article/details/44040739 方法1:使用Vector3.MoveTowards </pre><pre ...
- mongodb的安装和sql操作
mongodb安装环境:centos6.5https://www.mongodb.org/dl/linux/x86_64wget https://fastdl.mongodb.org/linux/mo ...
- [luogu1357] 花园 [dp+矩阵快速幂]
题面: 传送门 思路: 把P形花圃记录为0,C形记录为1,那么一段花圃就可以状态压缩成一个整数 那么,我们可以有这样的状压dp: dp[i][S]表示前i个花圃,最后m个的状态为S的情况 如果这是一条 ...