在Volley中传递JsonObject作为POST参数



我有一个API端点,它需要在POST请求中作为JsonObject发送参数。

我将得到的响应不是Json,而是一个小CSV字符串。

代码是

stringRequest = new StringRequest(Request.Method.GET, "http://apitest.eezyrent.com/api/userauthentication/SignUp",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Display the first 500 characters of the response string.
                        Toast.makeText(getApplication(), response.toString(), Toast.LENGTH_SHORT).show();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getApplication(), error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> jsonParams2 = new HashMap<String, String>();
                jsonParams2.put("vcFName", firstname.getText().toString());
                jsonParams2.put("vcLname", lastname.getText().toString());
                jsonParams2.put("vcMobileNo", phone_no.getText().toString());
                jsonParams2.put("vcGender", gender_short);
                jsonParams2.put("vcEmailAddress", email.getText().toString());
                jsonParams2.put("vcPassword", password.getText().toString());
                jsonParams2.put("vcFBID", "");
                jsonParams2.put("intLoginUserID", "");
                jsonParams2.put("SignUpFrom", "Web");
                jsonParams2.put("intloginid", "");
                jsonParams2.put("AlreadyRegister", "");
                return jsonParams2;
            }
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            headers.put( "charset", "utf-8");
            return headers;
        }
    };

上面的代码很大程度上受到了来自这个社区的答案的启发,但这似乎并不能解决我的问题。

我得到Volley Error 405.

 E/Volley﹕ [112549] BasicNetwork.performRequest: Unexpected response code 405 for http://myurl

事实上,如果我使用AsyncTask而不是Volley,使用相同的json作为参数和相同的端点url。它的工作原理!从这个问题中找到了AsyncTask代码。Java HttpClient更改内容类型?

但是我想使用Volley,这个问题的解决方案是什么?

JSON对象示例

{"vcFName":"Ron","vcLname":"Weasley","vcMobileNo":"555888999","vcGender":"M","vcEmailAddress":"someone@somewhere.com","vcPassword":"123456","vcFBID":"","intLoginUserID":'',"SignUpFrom":"Web","intloginid":"","AlreadyRegister":""}

您需要使用JsonObjectRequest类。将参数作为json对象在JsonObjectRequest类的第三个参数中传递。下面是一小段代码:

 Map<String, String> jsonParams2 = new HashMap<String, String>();
            jsonParams2.put("vcFName", firstname.getText().toString());
            jsonParams2.put("vcLname", lastname.getText().toString());
            jsonParams2.put("vcMobileNo", phone_no.getText().toString());
            jsonParams2.put("vcGender", gender_short);
            jsonParams2.put("vcEmailAddress", email.getText().toString());
            jsonParams2.put("vcPassword", password.getText().toString());
            jsonParams2.put("vcFBID", "");
            jsonParams2.put("intLoginUserID", "");
            jsonParams2.put("SignUpFrom", "Web");
            jsonParams2.put("intloginid", "");
            jsonParams2.put("AlreadyRegister", "");
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
        YourUrl, new JsonObject(jsonParams2),
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        }) {
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", "application/json");
        headers.put( "charset", "utf-8");
        return headers;
    }
};

步骤1:使模型类可解析/可序列化
步骤2:在模型类中重写toString()。
步骤3:Map<String,JSONObject> params = new HashMap<>(); JSONObject object = null; try{ object = new JSONObject(classObject.toString()); }catch (Exception e){ } params.put("key", object); JSONObject objectParams = new JSONObject(params);
第四步:发送objectParams和JSONObject请求。
完成了! !

相关内容

最新更新