kylas
kylas

Reputation: 1455

No response after putting in Header in request

My code as follows:

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);

The code works initially but after we added headers which are required by the api request, the code above didn't seem to work.

Did I write the headers code above wrongly? Thanks for your help.

Error from logcat as follows:

BasicNetwork.performRequest: Unexpected response code 401

Upvotes: 0

Views: 32

Answers (1)

jackycflau
jackycflau

Reputation: 1121

i think you shouldn't place the getHeader() inside the constructor of JsonObjectRequest. It should be placed inside the anonymous class block

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;
       }
};

In case you wanna learn more, the inheritance hierarchy of JsonObjectRequest in volley is Request -> JsonRequest -> JsonObjectRequest . The method you are overriding getHeaders() is derived from the Request base class.

Upvotes: 1

Related Questions