请求中输入Header后无响应

No response after putting in Header in request

我的代码如下:

public void getProfile(){
        String LOGIN_REQUEST_TAG = "LOGIN_REQUEST_TAG";
        String url = Constants.API_URL + "/users/profile";

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("Login Response:", response.toString());
                JSONObject responseOject = response;
                if(responseOject.has("response")){
                    try {
                        Log.d("Data Response", responseOject.getString("response"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }else if(responseOject.has("error")){
                    try {
                        errorMessage = responseOject.getString("error");
                        new AlertDialog.Builder(MainActivity.this)
                                .setTitle("Error")
                                .setMessage(errorMessage)
                                .setNegativeButton("OK", null)
                                .show();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }else{
                    //Server error. Come back again later

                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.e("Error at login: ", error.getMessage());
            }

            /**
             * Passing some request headers
             */
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json");
                headers.put("Authorization", "Bearer DGZjaza3saxL98g9ATRUQsolCxEZPBUd");
                return headers;
            }
        });
        AppSingleton.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest,LOGIN_REQUEST_TAG);

该代码最初有效,但在我们添加了 api 请求所需的 headers 之后,上面的代码似乎无法正常工作。

我上面的headers代码是不是写错了?感谢您的帮助。

来自 logcat 的错误如下:

BasicNetwork.performRequest: Unexpected response code 401

我认为您不应该将 getHeader() 放在 JsonObjectRequest 的构造函数中。它应该放在匿名 class 块

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
        Request.Method.GET, 
        url, 
        null, 
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("Login Response:", response.toString());
                JSONObject responseOject = response;
                if(responseOject.has("response")){
                    try {
                        Log.d("Data Response", responseOject.getString("response"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }else if(responseOject.has("error")){
                    try {
                        errorMessage = responseOject.getString("error");
                        new AlertDialog.Builder(MainActivity.this)
                                .setTitle("Error")
                                .setMessage(errorMessage)
                                .setNegativeButton("OK", null)
                                .show();
                     } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }else{
                    //Server error. Come back again later
                }
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.e("Error at login: ", error.getMessage());
            }
        }
){
       @Override
       public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            headers.put("Authorization", "Bearer DGZjaza3saxL98g9ATRUQsolCxEZPBUd");
            return headers;
       }
};

如果您想了解更多信息,volley 中 JsonObjectRequest 的继承层次结构是 Request -> JsonRequest -> JsonObjectRequest 。您覆盖的方法 getHeaders() 派生自请求基础 class。