如何将json从android发送到php?

2024-05-05

为了将 json 从 android 发布到 php,我使用了 Volley 库StringRequest目的。

StringRequest sr = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // some code
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //some code
            }
        }){
            @Override
            protected Map<String,String> getParams(){
                Map<String, String> params = new HashMap<String, String>();
                ArrayList<Command> commands = MyApplication.readFromPreferences(getActivity(), Constants.COMMAND);
                String jsonCommands = new Gson().toJson(commands);
                params.put("commands", jsonCommands);
                return params;
            }
        };

为了捕获 php 中的数据并验证它是否正确发送,我使用了这个

echo $_POST["commands"]; 

Output:

[{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"CF77 COIN FINDER\",\"url_image\":\"IMG_76ECDC-707E7E-70AC81-0A1248-4675F3-F0F783.jpg\",\"name\":\"CF77 COIN FINDER\",\"pid\":12,\"price\":500.0},\"product_quantity\":3},{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"JEOSONAR 3D DUAL SYSTEM\",\"url_image\":\"IMG_2D9DF0-2EB7E9-ED26C0-2C833B-B6A5C5-5C7C02.jpg\",\"name\":\"JEOSONAR 3D DUAL SYSTEM\",\"pid\":15,\"price\":500.0},\"product_quantity\":1},{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"MAKRO POINTER\",\"url_image\":\"IMG_Macro.jpg\",\"name\":\"MAKRO POINTER\",\"pid\":18,\"price\":500.0},\"product_quantity\":3}]

我注意到,当使用 Volley 库通过 POST 方法发送 json 字符串时,添加了很多反斜杠来转义双引号。

所以我的问题来了:

我想将 json 解码为 php 中的对象数组,所以我使用

$commands = json_decode( $_POST["commands"],true);

但由于 json 上面的无效(由反斜杠引起),它总是返回一个空数组。

php 或 java SDK 中是否有方法提供发送和接收 json 的合同而不会出现此类问题?或者我应该在 php 中重新格式化 json 并删除所有反斜杠?


问题是您尝试在 URL 参数中发送 json 数据。

您需要覆盖getBody()方法将 json 数据作为请求正文返回,而不是作为 url 参数。

Eg:

/**
 * Returns the raw POST or PUT body to be sent.
 *
 * @throws AuthFailureError in the event of auth failure
 */
public byte[] getBody() throws AuthFailureError {
    return new Gson().toJson(commands).getBytes();
}

然后在 PHP 中您可以:

$jsonRequest = json_decode(stream_get_contents(STDIN));

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将json从android发送到php? 的相关文章

随机推荐

  • 如何设置评分栏的星星颜色?

    如何设置评分栏的星星颜色 我想要黄色星星 最简单的方法 android progressTint color color 光滑有光泽
  • 在 grid.text 中使用 pch 字符

    我使用 ggplot2 创建了一个图表 现在我想让图例不在图表上 而是在图表外的网格中 我现在的问题是 是否有人知道是否有可能在 grid text 中使用 pch 符号 Here is an image to show what I wa
  • WSO2 ESB 4.0.3 - 从 4.0.* 存储库安装数据服务功能时出错

    我下载了 WSO2 ESB 4 0 3 并将其解压到我的 MAC OSX 10 7 5 的 MAC book PRO 上 我通过管理 UI 添加了以下存储库 http dist wso2 org p2 carbon releases 4 0
  • 为什么在二维数组中 a 和 *a 指向相同的地址? [复制]

    这个问题在这里已经有答案了 我只是想了解二维数组是如何实现的以及内存分配是如何发生的 所以我对给定的 c 程序有些疑问 为什么 a 和 a 给出相同的地址 include
  • 将两个相似的远程 git 存储库合并为一个

    我已经做了一些搜索并阅读了 git 书籍和网络上的一些地方 例如 git 但我找不到正确的方法来做到这一点 我有两个 git 存储库 位于两台不同的机器上 这些 git 存储库中的每一个都保存程序的配置 当您比较两个存储库时 配置的某些部分
  • android 表格内的可聚焦行

    我在 xml 中有一个 ScrollView 其中包括一个 TableLayout 我的问题是 每次我单击它时是否可以有一个可聚焦的行 这是我的 xml 代码
  • 有没有办法在两个 Visual Studio 实例之间拖放来复制文件?

    有没有办法在两个 Visual Studio 2008 实例之间复制文件 插件 设置还是其他什么 目前 将文件从一个实例拖动到另一个实例不会执行任何操作 鼠标显示该操作无效 右键单击文件并从实例 1 中选择 复制 然后粘贴到实例 2 中会导
  • 如何匹配特质实现者

    我有一个由某些结构实现的特征 我想编写一个模式匹配 可以处理每种可能的情况 trait Base struct Foo x u32 struct Bar y u32 impl Base for Foo impl Base for Bar f
  • 在 GitHub 上托管可执行文件?

    我想将可执行文件与我的源代码一起分发 我的源代码全部整齐地托管在 GitHub 上 是否可以将可执行文件和安装程序添加到我的 GitHub 项目页面 而不将它们添加到我的 git 存储库 请注意 由于某种原因 GitHub 停止了此功能 请
  • 如何使用 Spark 执行插入覆盖?

    我正在尝试将我们的 ETL Hive 脚本之一转换为 Spark 其中 Hive ETL 脚本维护一个表 其中需要在每晚新同步之前删除部分数据 Hive ETL 使用插入覆盖的方式将主表删除超过 3 天的数据 基本上创建一个临时表 其中的数
  • 支持多屏幕[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 支持多个屏幕和不同的屏幕密度必须注意
  • 计算集合中某种类型的对象并将其用作文本框中的字符串

    我想用集合中某种图形的 count 1 填充文本框 该集合是图形的通用列表 图形是某种类型的图形的实例 以下作品 txtName Text figures OfType
  • 为什么 LocationSettingsResult startResolutionForResult 不调用 onActivityResult?

    我看过这个问答LocationSettingsRequest 对话框 跳过 onActivityResult https stackoverflow com questions 31235564 locationsettingsreques
  • SharePoint DateTime 默认值尊重时区

    我有一个日期时间字段 仅限日期 它使用 今天的日期 作为默认值 但是 当用户将项目添加到列表时 选择的日期对应于 GMT 时区 因此 如果用户在 2012 年 2 月 22 日晚上 7 点 美国东部标准时间 添加项目 则默认值实际上将显示为
  • 修改rails ActiveAdmin gem中的BaseController

    我在 Rails 应用程序中使用 ActiveAdmin gem 如果我想添加一个适用于所有 activeadmin gem 的新的 before 过滤器 我该怎么做 我想我可以修改 ActiveAdmin 中的 BaseControlle
  • 如何在 django-tastypie 中获取授权用户对象

    我需要在水合物方法中获取授权用户对象 如下所示 class SalepointResource ModelResource def hydrate self bundle user bundle request user But reque
  • Go中funcappend的实现在哪里?

    我对 go 非常感兴趣 并尝试阅读 go 函数的实现 我发现其中一些函数没有实现 如追加或调用 The append built in function appends elements to the end of a slice If i
  • Twitter Bootstrap:仅将某些菜单项折叠到下拉菜单中

    我想知道如何创建 Twitter Bootstrapnavbar在调整浏览器窗口大小时折叠该菜单中的项目 一次折叠一个或两个项目 我见过的大多数导航栏都将整个导航栏折叠成一个下拉菜单 当窗口大小调整时 基本上隐藏了导航栏上的所有内容 但我仍
  • 在 package.json 中声明时 Reactify 转换未运行

    我正在尝试将reactify 转换与browserify 和gulp 结合使用 这个 gulp 任务有效 return browserify paths node modules app scripts entries app script
  • 如何将json从android发送到php?

    为了将 json 从 android 发布到 php 我使用了 Volley 库StringRequest目的 StringRequest sr new StringRequest Request Method POST url new R