Android Volley请求失败

时间:2016-12-22 16:45:20

标签: android oauth-2.0 android-volley

我正在通过android尝试使用密码授予类型获取Oauth凭据的Volley请求。我正在尝试在邮递员工作,但不是在Android工作,我不知道我做错了什么。请在下面找到我正在使用的代码:

    final RequestQueue queue = Volley.newRequestQueue(this);

    final String url = Constants.OAUTH_URL;

    Map<String, String> body = new HashMap<>();
    body.put("grant", "password");
    final JSONObject jso = new JSONObject(body);

    JsonObjectRequest postRequest = new JsonObjectRequest (Request.Method.POST, url, jso,
            new Response.Listener<JSONObject>()
            {
                @Override
                public void onResponse(final JSONObject response) {
                    //Do something
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    responseText.setText(error.toString());
                }
            }
    ) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            headers.put("accept", "application/vnd.TestKitchen.v1+json");
            headers.put("Authorization", BasicAuth.getBasicAuth(Constants.USERNAME, Constants.PASSWORD));
            headers.put("Content-Type", "application/json; charset=UTF-8");
            return headers;
        }
    };
    queue.add(postRequest);

我的OAuth网址是正确的,我已多次验证过。所以问题不是这方面的错字。所有其他字段仍然应该到达我的服务器并给出适当的响应(无论是否是错误),但是我发送的所有请求都返回400响应。有什么明显我做错了我应该修理吗?任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

你为什么要用这个东西?

Map<String, String> body = new HashMap<>();
body.put("grant", "password");
final JSONObject jso = new JSONObject(body);

您可以直接将值放在JSONObject

JSONObject jso = new JSONObject();
jso.put("grant", "password");

对于带有JSON有效负载的REST API,通常情况下,我会说400,用于表示根据服务的API规范,JSON在某种程度上无效。