【问题标题】:How to use POST request in android Volley library with params and header?如何在带有参数和标头的 android Volley 库中使用 POST 请求?
【发布时间】:2017-09-12 08:05:18
【问题描述】:

我正在尝试学习 Volley 库以将数据发布到 Web 服务中。我需要实现用户注册表单,下面是带有参数和标题的邮递员图像...

现在的问题是,我遇到了错误

com.android.volley.ServerError

这是我的 volley post 方法的代码。

public void postNewComment(){
    try {
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        String URL = "http://myurl/api/users";
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("email", "test1@gmail.com");
        jsonBody.put("user_type", "C");
        jsonBody.put("company_id", "0");
        jsonBody.put("status", "A");
        jsonBody.put("password", "123456");

        final String requestBody = jsonBody.toString();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.i("VOLLEY", response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                Log.e("VOLLEY", error.toString());
            }
        }) {
            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                final Map<String, String> headers = new HashMap<>();
                headers.put("Authorization", "Basic " + "My_auth_key");
                headers.put("Content-Type", "application/json");

                return headers;
            }

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                String responseString = "";
                if (response != null) {
                    responseString = String.valueOf(response.statusCode);
                    // can get more details such as response.headers
                }
                return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
            }
        };

        requestQueue.add(stringRequest);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

请提出我哪里出错了。 URL 与邮递员一起工作正常,你也可以看到我需要设置 2 个标题。我还用 AsyncTask 尝试了这个 Url post 方法,它工作得很好。现在我需要使用 volley 库来实现它。请建议。谢谢你。

这是我的 logcat 错误:

E/Volley:[81910] BasicNetwork.performRequest:“Myurl”的意外响应代码 405

【问题讨论】:

  • 在此处发布您的完整 logcat 日志。 com.android.volley.ServerError 它也应该给你错误编号,比如 400,500
  • 请检查先生@SahilManchanda
  • @paragKartpay 您得到 405,这意味着方法不允许。但是,如果您的邮递员的形象。它的工作。我的猜测是你的凌空请求没有得到验证。检查您的标题值。您可能在标题中做错了什么。还有一件事,你不需要重写 parseNetworkResponse 方法。删除它。

标签: android android-volley


【解决方案1】:

**试试这个**

    private void sendWorkPostRequest() {

        try {
            String URL = "";
            JSONObject jsonBody = new JSONObject();

            jsonBody.put("email", "abc@abc.com");
            jsonBody.put("password", "");
            jsonBody.put("user_type", "");
            jsonBody.put("company_id", "");
            jsonBody.put("status", "");

            JsonObjectRequest jsonOblect = new JsonObjectRequest(Request.Method.POST, URL, jsonBody, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    Toast.makeText(getApplicationContext(), "Response:  " + response.toString(), Toast.LENGTH_SHORT).show();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    onBackPressed();

                }
            }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    final Map<String, String> headers = new HashMap<>();
                    headers.put("Authorization", "Basic " + "c2FnYXJAa2FydHBheS5jb206cnMwM2UxQUp5RnQzNkQ5NDBxbjNmUDgzNVE3STAyNzI=");//put your token here
                    return headers;
                }
            };
            VolleyApplication.getInstance().addToRequestQueue(jsonOblect);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        // Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();

    }
}

【讨论】:

  • 这个答案救了我。大tnx!
【解决方案2】:

我有一个替代答案,它适用于 dworks 和 Google 的 Android Volley+ 库:请参阅 HERE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 2021-08-11
    • 2016-02-06
    • 2018-02-08
    • 2019-12-13
    • 2018-12-09
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多