排球字符串请求发布参数在php中始终为null。

时间:2018-12-10 08:56:02

标签: php android android-volley

我正在发送带有一些参数的字符串POST请求,但是在PHP脚本中,我总是将参数值设置为null。当我用邮递员测试PHP时,它的工作正常。

这是我的排球请求代码:

public void login(final String mPhone, final String mEmail, final String mPassword) {


        StringRequest stringRequest = new StringRequest(Request.Method.POST, URLs.LOGIN, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    if (jsonObject.getBoolean("error")) {
                        String error = jsonObject.getString("message");
                        if (error.equals("new user")) {
                            registerUser();
                        } else {
                            showProgress(false);
                            Snackbar.make(mOtpView, error, Snackbar.LENGTH_SHORT).show();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                showProgress(false);
                Snackbar.make(mOtpView, error.getMessage(), Snackbar.LENGTH_SHORT).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("phone", mPhone);
                params.put("email", mEmail);
                params.put("password", mPassword);

                return params;
            }
        };
        //Method to limit retry policy of request
        stringRequest.setRetryPolicy(
                new DefaultRetryPolicy(
                        DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2,
                        3,
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
                )
        );
        try {

            //Adding request to request queue
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这是我的PHP:

require_once 'DbConfig.php';

$response = array();

if (isset($_GET['apicall'])) {
    switch ($_GET['apicall']) {
        case 'login':

            $phone = $_POST['phone'];
            $email = $_POST['email'];
            $pass = $_POST['password'];

            echo $phone.$email.$pass;exit();

我已经尝试通过覆盖getHeaders()添加标头,并且还尝试覆盖getBodyContent(),但是似乎没有任何效果,并且上述代码在im在localhost中使用时也能正常工作。我检查了URL是否正常,因为PHP脚本很好,因为我通过回显它执行得很好的其他方式对其进行了测试。

3 个答案:

答案 0 :(得分:1)

已解决!!!不能想想这个!实际上,我使用的URL类似于:-http://www.example.com,但是当我尝试http://example.com时..它却起到了作用……虽然感谢大家的帮助!

答案 1 :(得分:0)

通常,此问题可能来自Content-Type,向其添加charset = utf-8:

 params.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

信用:Volley-POST-EMPTY

答案 2 :(得分:0)

您仅发送;

params.put("phone", mPhone); params.put("email", mEmail); params.put("password", mPassword);

怎么样? params.put("apicall","YOu_API");

我猜没有设置apicall,所以值将为空。