【问题标题】:Recive JSON object in a PHP script from Android从 Android 接收 PHP 脚本中的 JSON 对象
【发布时间】:2015-06-19 03:25:07
【问题描述】:

这是我第一次使用 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();
 }

【问题讨论】:

  • 为什么要抓取原始输入?将其发布到您的脚本并使用$_POST
  • 我无法弄清楚 url 包含什么。由于您的 PHP 和 Android 代码看起来不错。我曾开发过类似的应用程序,因此请进一步澄清。
  • 您似乎没有将字符串实体发送到任何地方。您需要将其添加到http请求中
  • @AshwaniGoyal urlis www.example.com/api.php
  • 好的,这意味着php文件是api.php。现在我需要查看您从 Android 代码发送的数据结构。

标签: php android json


【解决方案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;
    }

非常感谢每一位帮助过我的人!

【讨论】:

    【解决方案2】:

    您正在使用 POST 方法。

    所以你的php代码应该是:

    <?php
        $input = $_POST['some_field_name'];
        $json = json_decode($data, true);
        var_dump($json);
    ?>
    

    元素的名称取决于您发布的数据的结构。

    请记住,此脚本将在服务器上运行,因此除非您的 Android 应用获取响应并显示它,否则您不会看到任何事情发生。

    在您进行一些调试之前,您可能希望将数据写入文件,或者存根您需要对正在发布的数据执行的任何操作。

    当然,有很多工具可以用来测试 API,从 curl 到各种 Web 插件。作为一项建议,我从 Chrome 应用程序“Postman”中获得了很多好处。

    【讨论】:

    • 感谢调试建议。但是还是不行,邮递员给我的结果是null。可能是我发送参数的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多