【问题标题】:Volley Post Request ClientErrorVolley Post Request ClientError
【发布时间】:2020-02-05 13:57:54
【问题描述】:

我正在尝试使用 Volley 向我的服务器发送 POST 请求,但它没有工作。 我的 GET 请求工作正常,我还使用邮递员检查我在服务器上的休息服务是否正常工作。

我总是收到 ClientError:

com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:190)
com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)

我在这里看到了许多不同的解决方案,但没有一个能解决我的问题。 我的 StringRequest 看起来像这样:

                                StringRequest addOrder = new StringRequest(
                                        Request.Method.POST,
                                        "http://myservice/rest/order",
                                        new Response.Listener<String>() {
                                            @Override
                                            public void onResponse(String response) {
                                                String success =  "DONE";
                                            }
                                        },
                                        new Response.ErrorListener() {
                                            @Override
                                            public void onErrorResponse(VolleyError error) {
                                                String test = error.toString();
                                                //Log.e("Rest Response", error.toString());
                                            }
                                        })
                                {
                                    @Override
                                    public String getBodyContentType() {
                                        return "application/json; charset=utf-8";
                                    }

                                    @Override
                                    public byte[] getBody() {
                                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
                                        try{
                                            ObjectOutputStream oos = new ObjectOutputStream(bos);
                                            oos.writeObject(clickedCocktail);
                                            oos.flush();
                                        }
                                        catch(IOException ioe){
                                            //Do Stuff by Exception
                                            String exStr = ioe.getMessage();
                                        }
                                        return bos.toByteArray();
                                    }
                                };
                                requestQueue.add(addOrder);
                            }

【问题讨论】:

    标签: android post request android-volley


    【解决方案1】:

    一般客户端错误响应是由于 URL 发送错误的参数引起的。请检查每个参数的拼写,并确定响应是在字符串中还是在对象中。

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
                ApplicationData.POST_URL, new JSONObject(postParams),
                new com.android.volley.Response.Listener<JSONObject>() {
    
                    @Override
                    public void onResponse(JSONObject response) {
                        //Log.d("TAG", response.toString());
                        try {
                            //Toast.makeText(mContext, response.getString("message"), Toast.LENGTH_LONG).show();
                            Toast.makeText(mContext, "Thank you for your post", Toast.LENGTH_LONG).show();
    
                            if (response.getBoolean("status")) {
                                pDialog.dismiss();
                                finish();
                            }
                        } catch (JSONException e) {
                            Log.e("TAG", e.toString());
                        }
                        pDialog.dismiss();
                    }
                }, new com.android.volley.Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error) {
                //VolleyLog.d("TAG", "Error: " + error.getMessage());
                pDialog.dismiss();
                if (isNetworkProblem(error)) {
                    Toast.makeText(mContext, "Internet Problem", Toast.LENGTH_SHORT).show();
    
                }
            }
        }) {
    
            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }
    
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                return getRequestHeaders();
            }
        };
    
        jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(8000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
    

    你可以参考这段代码

    【讨论】:

    • 向您展示一些服务器方法的代码有帮助吗?
    • 谢谢,我解决了。问题是设置请求正文的部分。我将其更改为将对象制作为 jsonobject,然后将字符串发送到服务器并且它起作用了。删除请求的问题是忽略了请求正文。但感谢您的帮助
    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多