从Android获取PHP脚本中的JSON对象

时间:2015-04-13 17:48:23

标签: php android json

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

2 个答案:

答案 0 :(得分: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;
    }

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

答案 1 :(得分:0)

您正在使用POST方法。

所以你的php代码应该是:

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

元素的名称取决于POSTed数据的结构。

请注意,此脚本将在服务器上运行,因此除非您的Android应用正在接收响应并显示响应,否则您不会看到任何事情发生。

在您进行一些调试之前,您可能希望将数据写入文件,或者存储在您发布的数据所需的任何内容中。

当然,有很多工具可以从curl到各种可用于测试API的Web插件。作为一个建议,我已经从Chrome应用程序&#34; Postman&#34;中获得了很多里程。