使用Volley的Android登录POST请求

时间:2019-06-12 08:53:05

标签: java android request android-volley

大家好,我对Volley POST请求有疑问。我要登录仅用于登录用户的框。该请求的响应只是此日志框的html代码。它应该登录我(例如下面的POSTman代码),然后我可以做我需要做的其他事情。代码中的登录数据仅作为示例是无效的。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         requestQueue = Volley.newRequestQueue(this);
         requestQueue.start();
    }

    @Override
    public void onClick(View v) {
        if (v == buttonLogin) {
            loginUser();
        }
    }

    public void loginUser() {
         StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ns3.apis.sk:28080/login_check",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    getJsonData();
                    Log.d("Response", response);
                    Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<>();
                params.put("_username","admin");
                params.put("_password","root");
                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                final HashMap<String, String> headers = new HashMap<>();
                headers.put("Content-Type", "multipart/form-data");
                return headers;
        }
    };
    requestQueue.add(stringRequest);
}

也有POSTman代码可以正常执行我想在Android中实现的功能。

     {
        "name": "http://ns3.apis.sk:28080 - login_check",
        "request": {
            "method": "POST",
            "header": [
                {
                    "key": "Content-Type",
                    "name": "Content-Type",
                    "value": "application/json",
                    "type": "text"
                }
            ],
            "body": {
                "mode": "formdata",
                "formdata": [
                    {
                        "key": "_username",
                        "value": "admin",
                        "type": "text"
                    },
                    {
                        "key": "_password",
                        "value": "root",
                        "type": "text"
                    }
                ]
            },
            "url": {
                "raw": "http://ns3.apis.sk:28080/login_check",
                "protocol": "http",
                "host": [
                    "ns3",
                    "apis",
                    "sk"
                ],
                "port": "28080",
                "path": [
                    "login_check"
                ]
            }
        },
        "response": []
    }

2 个答案:

答案 0 :(得分:0)

将此代码用作标题

@Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            final HashMap<String, String> headers = new HashMap<>();
           // headers.put("Content-Type", "multipart/form-data");
            return headers;
 @Override
        public String getBodyContentType() {
            return "multipart/form-data";
        }

将此用于字段

JSONObject jsonParams = new JSONObject();
jsonParams .put("_username","admin");
jsonParams .put("_password","root");

我希望这会对您有所帮助

答案 1 :(得分:0)

大家好,终于解决了。删除了getheaders()方法。可能Volley库知道隐式使用什么。最重要的是启用cookie,因为Volley默认将其禁用。

@Override
    protected void onCreate(Bundle savedInstanceState) {
         CookieManager manager = new CookieManager();
         CookieHandler.setDefault(manager);
         requestQueue = Volley.newRequestQueue(this);
         requestQueue.start();
    }

    @Override
    public void onClick(View v) {
        if (v == buttonLogin) {
            loginUser();
        }
    }

    public void loginUser() {
         StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://ns3.apis.sk:28080/login_check",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    getJsonData();
                    Log.d("Response", response);
                    Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<>();
                params.put("_username","admin");
                params.put("_password","root");
                return params;
            }
    };
    requestQueue.add(stringRequest);