Проблема в использовании пользовательского заголовка для всех моих запросов Volley - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу сделать заголовок Auth для ВСЕХ моих запросов Volley. Я узнал, как я могу создать заголовок, переопределяющий getHeaders класса запроса, но я не могу время от времени изменять его из каждого запроса и хочу, чтобы он сортировался Стати c или глобальный, где я могу изменить его, и он меняется везде. Вот что я пробовал до сих пор.

Основной класс активности

public class MainActivity extends AppCompatActivity {
RequestQueue requestQueue;
JsonObjectRequest jsonreq;
JSONObject object;
  try{

                requestQueue = Volley.newRequestQueue(MainActivity.this);

                object=new JSONObject();
                jsonreq=new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        res=response.toString();
                        Log.d("log1","res : " + res);

                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d("log1","Error from response : " +error.networkResponse.statusCode);

                    }


                }) {
//want to get rid of this function from here and create in a global scope so I can control its implementation everywhere
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                          Map<String,String> params=new HashMap<String,String>();
    params.put("Authorization","xxxxxxxx");
    return params;

                    }
                };


               requestQueue.add(jsonreq);    

            }
            catch (Exception e){
                Log.d("log1","error from catch " + e);
                return e.toString();
            }
            return res;

Я попытался создать собственный класс, который расширяет HurlStack и переопределяет запрос на выполнение. Вот код для пользовательского класса HurlStack под названием GlobalHeaders

public class GlobalHeaders extends HurlStack {
    String testing="xxxxxxxx";

    @Override
    public HttpResponse executeRequest(Request<?> request, Map<String, String> additionalHeaders) throws IOException, AuthFailureError {
        Map<String, String> headers = request.getHeaders();
        headers.put("Content-Type", "application/json; charset=utf-8");
        headers.put("Authorization",testing);
        return super.executeRequest(request, headers);
    }

Теперь я не уверен, как я могу использовать этот метод в своем основном классе, где я добавляю requestQueue (jsonReq); Я попробовал другой способ, где я переопределил класс Request Volley своим собственным классом, но снова потерпел неудачу. Пожалуйста, укажите, как я могу сделать эту работу или любой другой подход. Я новичок в Java и Android.

1 Ответ

0 голосов
/ 21 апреля 2020

Хорошо, я попытался, и это решение, кажется, работает. Публикация здесь, так что это также может помочь кому-то в будущем.

Удален метод getHeader из основного действия, так как запрос на выполнение вызывается сам, когда я добавил его экземпляр в запрос, используя приведенный ниже код.

 if(stack == null){
                    stack=new GlobalHeaders();
                    requestQueue=Volley.newRequestQueue(getApplicationContext(),stack);
                    requestQueue.add(jsonreq);

                }

Также необходимо изменить первую строку в методе executeRequest, чтобы обработать пустое исключение следующим

 Map<String, String> headers = new HashMap<>(additionalHeaders);

и сохранить инструкцию возврата без изменений.

...