【问题标题】:JSON _POST empty from android HttpPostandroid HttpPost 中的 JSON _POST 为空
【发布时间】:2013-02-12 03:18:16
【问题描述】:

我不明白我的 _POST 是空的

我创建了一个 JSONOBJECT 我将它传递给 HTTPPost 像这样:

   HttpPost post = new HttpPost(URL);

                StringEntity se = new StringEntity(json.toString());
                se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                        "application/json"));
                post.setEntity(se);
                response = client.execute(post);

但它显示为一个空数组

这是完整的代码

创建我的 JSON 对象(可以调试它并观察它填充

public static final JSONObject GetJSONObject(Customer customer) {

        try {
            JSONObject values = new JSONObject();
            values.put(Customer.KEY_NAME, customer._name); // Contact Name
            values.put(Customer.KEY_PH_NO, customer._phone); // Contact Phone
            values.put(Customer.KEY_EMAIL, customer._email);
            values.put(Customer.KEY_UUID, customer._UUID);
            values.put(Customer.KEY_GEOUUID, customer._geoUUID);
            values.put(Customer.KEY_SALESREPUUID, customer._salesRepUUID);
            values.put(Customer.KEY_CUST_LAST_UPDATE, customer.last_update);
            values.put(Customer.KEY_CUST_NOTES, customer._notes);
            return values;
        } catch (JSONException e) {
            Log.d("ERROR", e.getMessage());
            System.exit(1);
        }
        return null;
    }

开始发送线程

        ma.ShowToastMsg("Updating Contract To mySQL" + customer._name);
    mh.sendJSONTHREAD("http://.php",
            GetJSONObject(customer));
public void sendJSONTHREAD(final String URL, final JSONObject json) {
    new Thread(new Runnable() {
        public void run() {
            sendJson(URL, json);
        }
    }).start();
}

发送

public void sendJson(final String URL, final JSONObject json) {
    Looper.prepare(); // For Preparing Message Pool for the child Thread
    HttpClient client = new DefaultHttpClient();
    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); // Timeout
                                                                            // Limit
    HttpResponse response;

    try {
        HttpPost post = new HttpPost(URL);

        StringEntity se = new StringEntity(json.toString());
        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                "application/json"));
        post.setEntity(se);
        response = client.execute(post);


        /* Checking response */
        if (response != null) {
            Log.d("RESPONSE", EntityUtils.toString(response.getEntity()));

            //InputStream in = response.getEntity().getContent(); // Get the
                                                                // data in
                                                                // the
                                                                // entity
            //Log.d("HTTPPOST", in.toString());
        }

    } catch (Exception e) {
        e.printStackTrace();
        // createDialog("Error", "Cannot Estabilish Connection");
    }

    Looper.loop(); // Loop in the message queue

}

以及 PHP 方面

include("settings.php");

mysql_connect($loginURL,$username,$password);
@mysql_select_db($database) or die("-9");

echo var_dump($_POST);

$varname = mysql_real_escape_string(strip_tags($_POST['name']));
$varemail = mysql_real_escape_string(strip_tags($_POST['email']));
$varphone = mysql_real_escape_string(strip_tags($_POST['phone']));
$varUUID = mysql_real_escape_string(strip_tags($_POST['UUID']));
$vargeopointUUID = $_POST['geopointUUID'];

echo var_dump($_POST);

echo var_dump($_POST) - 返回数组 (0){}

【问题讨论】:

    标签: php android json http-post


    【解决方案1】:

    POST 不期望传递 JSON,而是传递如下名称/值对:

    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("key1", "value1"));
    params.add(new BasicNameValuePair("key2", "value2"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    

    如果您想将 JSON 传递给 php,则需要检查和解析 $HTTP_RAW_POST_DATA

    解析原始过去数据的一种方法(由 OP 引用)如下(php):

    $obj = json_decode($HTTP_RAW_POST_DATA); $varname =$obj->{'name'};
    

    【讨论】:

    • 不明白 - 这里有很多关于成功使用 _POST 的教程和问题
    • 我检查了 HTTP_RAW_POST_DATA 并且我的所有数据都在其中 - 但是我无法填写变量 - 如果我执行 json_decode($HTTP_RAW_POST_DATA['name']);他们以 '{' 的形式返回
    • 尝试print_r( json_decode( $HTTP_RAW_POST_DATA ) ) 看看它是否正确解析——或者通过发送 URLEncodedFormEntity 来避免整个混乱,如上所述。如果您只是发送键/值对而没有任何嵌套,那么真的没有理由将数据发布到 json 中。
    • - 似乎打印正确......每个项目都像这样打印到屏幕上 - [UUID] => d3a15359-bc45-417d-b228-28dc561df773 所以我不能把它分配给一个变量像这样呢?? $varemail = json_decode($HTTP_RAW_POST_DATA['email']);
    • 你想先解码,然后访问 -- json_decode( $HTTP_RAW_POST_DATA )[ 'email' ]
    猜你喜欢
    • 2014-11-25
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2011-05-02
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多