无法将参数发送到PHP POST参数android

时间:2016-06-19 14:32:14

标签: php android post params jsonobject

我目前正在使用android volley并尝试通过发送productID来选择产品详细信息以获取产品的详细数据。

JSONObject params = new JSONObject();
    try {
        params.put("ProductID", intent.getStringExtra("productID"));
    } catch (JSONException e) {
        e.printStackTrace();
    }

    JsonObjectRequest detailReq = new JsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            txtNama.setText(intent.getStringExtra("nama"));
            txtManufacturer.setText(intent.getStringExtra("namaVendor"));
            txtHarga.setText("Rp. " + intent.getStringExtra("harga"));
            try {
                if(!response.getString("Foto1").equals(""))
                fotoUrl.add(response.getString("Foto1"));
                if(!response.getString("Foto2").equals(""))
                fotoUrl.add(response.getString("Foto2"));
                if(!response.getString("Foto3").equals(""))
                fotoUrl.add(response.getString("Foto3"));
                if(!response.getString("Foto4").equals(""))
                fotoUrl.add(response.getString("Foto4"));
                if(!response.getString("Foto5").equals(""))
                fotoUrl.add(response.getString("Foto5"));
                txtDesc.setText(response.getString("Deskripsi"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
            imageFragmentPagerAdapter.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(ProductActivity.this, "Error occurred! Please check your internet connection!", Toast.LENGTH_LONG).show();
        }
    });
    AppController.getInstance().addToRequestQueue(detailReq);

但是始终会调用onErrorResponse方法。这是我的PHP代码:

<?php

require("config.inc.php");

$query = "SELECT Foto1, Foto2, Foto3, Foto4, Foto5, Deskripsi 
           FROM `product` WHERE `ProductID` = '". $_POST['ProductID']."'";

try {
    $stmt   = $db->prepare($query);
    $result = $stmt->execute();
}
catch (PDOException $ex) {
    die(json_encode($response));
}

$row = $stmt->fetch();
if ($row) {
    echo json_encode($row);
}

?> 

但是当我将$ _POST ['ProductID']的值更改为例如'0001'时,php工作得很好。任何的想法?提前谢谢。

3 个答案:

答案 0 :(得分:2)

 void MakePostRequest() {
            StringRequest postRequest = new StringRequest(Request.Method.POST, EndPoints.BASE_URL_ADS,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONObject jsonResponse = new JSONObject(response);
                                value1= jsonResponse.getString("Your ID1");
                                value2= jsonResponse.getString("Your ID2");

                            } catch (JSONException e) {
                                e.printStackTrace();
                                banner_id = null;
                                full_id = null;
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            error.printStackTrace();
                            value1= null;
                            value2= null;
                        }
                    }
            ) {
           // here is params will add to your url using post method
                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<>();
                    params.put("app", getString(R.string.app_name));
                    //params.put("2ndParamName","valueoF2ndParam");
                    return params;
                }
            };
            Volley.newRequestQueue(this).add(postRequest);
        }

此帖子请求正在使用此编译com.mcxiaoke.volley:library:1.0.19排球版。

我只是添加应用名称作为参数。您可以添加更多参数。

祝你好运

答案 1 :(得分:1)

你最好单独检查服务器和Android的问题,正如你所提到的,有时服务器运行良好。

服务器检查

  1. 您可以使用Postman来测试服务器是否正常,或者在什么条件下,服务器是坏的。特别检查您的服务器的响应是标准的Json格式。如果您想要更轻松,请暂时将$_POST更改为$_GET,然后安装Chrome JSONView。然后通过Chrome进行测试。
  2. 检查数据库中的ProductID格式。如果是text,您最好先$product_id = $_POST['ProductID'],然后使用"$product_id"
  3. Android检查

    1. 我强烈建议您使用StringRequest代替JsonObjectRequest,手动将String转换为JSONObject。如果响应字符串不是JSONObject,则可以打印它并查找异常。
    2. 使用下面的代码创建JSONObject参数: Map<String, Object> paramsMap = new HashMap<>(); paramsMap.put("ProductID", 3); JSONObject params = new JSONObject(paramsMap);
    3. 希望能帮到你。

答案 2 :(得分:0)

要调试更多,你可以在php代码的顶部添加以下内容    后续代码var_dump($ _ POST);死();

然后在android中看到打印的值是什么,如果你什么都没得,那就意味着android没有正确发送请求。