Нет ответа после ввода заголовка в запросе - PullRequest
0 голосов
/ 11 декабря 2018

Мой код выглядит следующим образом:

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, приведенный выше код, похоже, не работает.

Я неправильно написал код заголовков?Спасибо за вашу помощь.

Ошибка logcat:

BasicNetwork.performRequest: Unexpected response code 401

1 Ответ

0 голосов
/ 11 декабря 2018

я думаю, что вы не должны помещать getHeader () в конструктор JsonObjectRequest.Он должен быть помещен в блок анонимного класса

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

Если вы хотите узнать больше, иерархия наследования JsonObjectRequest в залпе будет Запрос -> JsonRequest -> JsonObjectRequest .Метод, который вы переопределяете getHeaders(), получен из базового класса Request.

...