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 ...
随机推荐
- 洛谷P1424小鱼的航程改进版
题目链接https://www.luogu.org/problemnew/show/P1424
- ios开发学习笔记040-autolayout 第三方框架Masonry
不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...
- Postgresql 查看建表语句 命令
pg_dump -U username databasename -W -s -t tablename -s, --schema-only 只转储模式, 不包括数据 -t, --table=TABLE ...
- Leetcode 655.输出二叉树
输出二叉树 在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则: 行数 m 应当等于给定二叉树的高度. 列数 n 应当总是奇数. 根节点的值(以字符串格式给出)应当放在可放置的第一行正中间. ...
- android实现前置后置摄像头相互切换
首先自定义一个继承自SurfaceView并且实现了SurfaceHolder.Callback接口的组件: public class CameraView extends SurfaceView i ...
- Solr配置Ikanalyzer分词器
上一篇文章讲解在win系统中如何安装solr并创建一个名为test_core的Core,接下为text_core配置Ikanalyzer 分词器 1.打开text_core的instanceDir目录 ...
- Struts2请求流程
1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionContextCleanUp过滤器,其为可 ...
- BZOJ 3437:小P的牧场(DP+斜率优化)
小P的牧场[题目描述]背景:小P 是个特么喜欢玩MC 的孩纸...小P 在MC 里有n 个牧场,自西向东呈一字形排列(自西向东用1…n 编号),于是他就烦恼了:为了控制这n 个牧场,他需要在某些牧场上 ...
- 多线程(继承Thread)
/** *Thread的常用方法 *1.start(),启动线程再执行run方法 *2.run():子线程要执行的代码放入run()方法中 *3.currentThread()静态的,调取当前线程,返 ...
- 省选算法学习-dp优化-四边形不等式
嗯......四边形不等式的确长得像个四边形[雾] 我们在dp中,经常见到这样一类状态以及转移方程: 设$dp\left[i\right]\left[j\right]$表示闭区间$\left[i,j\ ...