【问题标题】:Volley string request post parameters always null in php.Volley 字符串请求发布参数在 php.ini 中始终为空。
【发布时间】:2018-12-10 08:56:02
【问题描述】:

我正在发送带有一些参数的字符串 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() 但似乎没有任何效果,而且当我在 localhost 中使用上面的代码时,它也可以正常工作。我检查了 URL 是否正常,因为 PHP 脚本很好,因为我已经通过回显它执行的其他内容对其进行了测试。

【问题讨论】:

  • 检查这个 $_GET['apicall'] 是否为空
  • 可能是进程没有进入回显语句
  • 还可以使用 Log 从 android 端检查您是否实际发送数据
  • @Urvishrana 我的 getParams() 方法正在调用,它正在初始化地图并成功返回

标签: php android android-volley


【解决方案1】:

解决了!!!永远不能考虑这个!实际上我使用的 URL 如下:- http://www.example.com 但是当我尝试 http://example.com 时,它就像魅力一样......虽然感谢大家的帮助!!

【讨论】:

    【解决方案2】:

    通常这个问题可能来自 Content-Type add charset=utf-8 :

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

    信用:Volley-POST-EMPTY

    【讨论】:

    • 现在没有工作不知道该怎么做,其他也尝试添加 params.put("Content-Type", "application/json; charset=utf-8");但问题总是一样的。
    • 也尝试了自定义请求......这也没有奏效......一切都在使用 android 的 postman 和 localdb 中正常工作,但当文件托管在网络上并且我尝试在那里发送请求时无法正常工作。
    • 尝试在 Request.Method.POST 中使用 Request.Method.Get 看看是两者都有问题还是只是发布
    【解决方案3】:

    你只是发送;

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

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

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

    【讨论】:

    • apicall 是与 url 一起使用的标头,我使用其中给出的值来执行正确的情况,即登录、注册。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多