Android volley StringRequest POST方法无法传递params

时间:2017-06-07 07:35:58

标签: android codeigniter android-volley

我目前正在尝试使用CodeIgniter访问我的数据库。但是我无法从StringRequest方法传递参数。它说:

  

消息:未定义索引:电子邮件

这是我的php代码:

public function index() {
    echo $_POST['email'];
}

这是我的StringRequest:

StringRequest request = new StringRequest(Request.Method.POST, SEND_REQUEST_URL,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                System.out.println(response);
            }
        }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        VolleyLog.d("Volley Error", error.getMessage());
    }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=UTF-8";
        }

        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("email", "test@test.com");
            return params;
        }
        };
        AppController.getInstance().addToRequestQueue(request);

我也尝试添加:

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String,String> params = new HashMap<String, String>();
    params.put("Content-Type","application/x-www-form-urlencoded");
    return params;
}

注意:

  1. 我知道使用jsonrequest传递参数时存在“bug”,所以我使用了stringrequest。
  2. 我已经覆盖了getBodyContentType方法。
  3. 不需要授权。
  4. 使用Postman进行测试时效果很好。
  5. 另外需要注意的是: 如果我将url发送到单个普通的php文件以回显POST值,它就可以工作。但它无法进入我的codeIgniter中的php文件。

    更新: 我发现虽然我从我的Android应用程序中使用了POST方法,但不知何故,codeigniter将其作为GET方法。我知道这个使用

      

    $ _ SERVER [ 'REQUEST_METHOD']

1 个答案:

答案 0 :(得分:1)

        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

        StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                System.out.println(response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String, String> params = new HashMap<String, String>();
                params.put("email", "test@test.com");
                return params;
            }
        };

        requestQueue.add(request);

我希望这篇文章可以帮到你