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 ...
随机推荐
- itchat 动态注册
动态注册时可以选择将itchat.run()放入另一线程或使用configured_reply()方法处理消息. 两种方法分别是: # 使用另一线程,但注意不要让程序运行终止 import threa ...
- 安装Mysql community server遇到计算机中丢失msvcr120.dll
一.下载community server版本 Mysql community server版本:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7 ...
- javascript 实现九九乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 网络抢票黄牛,大部分是骗人的。公布一个骗钱黄牛,QQ:2233261390,QQ群:29443597,支付页面:https://me.alipay.com/q336
想着给女友买张回广州的回程火车票,抢了3天也没弄到.情急之下找了网络上所谓的黄牛.结果上当受骗.具体经过是这样的: 对方承诺抢到再付款.于是等他抢到后截图给我看,而且可以远程到他的机器去看,我也确实远 ...
- 在 Amazon AWS 搭建及部署网站:(三)开发及部署环境
服务器已经搭建好,网站也开始运行了.那么如何方便地部署代码呢? 最基本的方式,就是使用 SFTP 向网站目录直接部署.这种方法的缺点是版本控制不便,在上传时也无法方便的比较代码变化. 用SVN来部署是 ...
- C#入门篇-3:数据类型及转换
using System; using System.Text; using System.Collections; using System.Collections.Generic; //003 查 ...
- leetcode 【 Search in Rotated Sorted Array II 】python 实现
题目: 与上一道题几乎相同:不同之处在于array中允许有重复元素:但题目要求也简单了,只要返回true or false http://www.cnblogs.com/xbf9xbf/p/42545 ...
- Android SDK 目录详解(转)
Android SDK目录结构和工具介绍是本文要介绍的内容,主要是来了解并学习Android SDK的内容,具体关于Android SDK内容的详解来看本文. Android SDK目录下有很多文件夹 ...
- linux常用命令与系统管理常用命令
linux命令:切换用户:开启ftp服务:service vsftpd start 开启ssh服务:service sshd start普通用户切换到超级用户:su rootlogout:(注销)un ...
- Python+Selenium练习篇之19-多窗口之间切换
本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...