Я получаю сетевое исключение.shouldRetryException: код неожиданного ответа 401 .Как я добавляю заголовки в этот код?

#java #android #api #http #android-volley

Вопрос:

как добавить заголовки в этот код после получения NetworkUtility.shouldRetryException: код неожиданного ответа 401 ?

 public void login(String username, String password, final APIListener listener){
   String url = BASE_URL   "api/login";
   JSONObject jsonObject = new JSONObject();
 

// прикрепление данных

    try {
      jsonObject.put("Context-Type","application/json");
      jsonObject.put("email",username);
      jsonObject.put("password",password);
 

//об успехе

       Response.Listener<JSONObject> successListener = response -> {
         try {
            User user = User.getUser(response);
            listener.onLogin(user);
            }
         catch (JSONException e) {
            try {
               User error =User.getErr(response);
               listener.onLogin(error);
             

            } catch (JSONException jsonException) {
               Toast.makeText(mApplication, "There was an error try again later", Toast.LENGTH_LONG).show();
            }
         }
      };
 

//обработка ошибок

       Response.ErrorListener errorListener = error ->{
         if (error instanceof com.android.volley.NoConnectionError) {
            Toast.makeText(mApplication, "No internet access", Toast.LENGTH_LONG).show();
         }else{
            Toast.makeText(mApplication, "There was an error", Toast.LENGTH_LONG).show();
         }
      };
      
      //Post request

      JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url,jsonObject,successListener,errorListener);
      mRequestQueue.add(request);
   } catch (JSONException e) {
      Toast.makeText(mApplication, "json exception", Toast.LENGTH_LONG).show();
   }

}
 

Ответ №1:

JsonObjectRequest наследует от запроса метод getHeaders(), все, что вам нужно сделать, это переопределить этот метод и вернуть необходимые пользовательские заголовки:

https://javadoc.io/doc/com.android.volley/volley/1.1.1/com/android/volley/toolbox/JsonObjectRequest.html

Пример использования приведен ниже:

             String endPointUrl //
            JSONObject requestObject //
            Response.Listener<JSONObject> listener //
            Response.ErrorListener errorListener) //

            final String finalUrl = endPointUrl;

            final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, finalUrl, requestObject, listener, errorListener) {


                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {

                       Map<String, String>  headers= new HashMap<String, String>();  
                       headers.put("User-Agent", "Nintendo Gameboy");  
                       headers.put("Accept-Language", "fr");

                      return headers;  
                    }
                };


             mRequestQueue.add(jsonObjectRequest );