Intereting Posts
Google Maps Android API v2 в Китае – загрузка карты заняла около часа Проверка IP-адреса в android Библиотека разработки Android 25.1.0 TextInputLayout Hint не отображается должным образом по сравнению с 24.2.1 Приложение Admob Ads иногда приводит к сбою в IllegalArgumentException Динамическое изменение данных Custom PreferenceScreen Ошибка INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES в PhoneGap Индикатор выполнения в панели уведомлений при загрузке изображения? Проблемы с представлением предварительного просмотра макета: цветные фильтры PorterDuff не поддерживаются Как перенести представление на передний план без вызова метода bringToFront ()? Как форматировать дату с днем ​​в Android? Как отправить SMS с помощью Twilio в приложении для Android? ActionBar не прокручивает выбранную вкладку, если она находится за пределами видимых границ actionBar на экране Поместите любой вид на VideoView в Android Отказ прав доступа Android в виджетах RemoteViewsFactory для контента Android AVD Manager: невозможно создать новое определение устройства (java.lang.NullPointerException)

Как настроить пользовательский заголовок в запросе Volley

Кто-нибудь знает, как настроить пользовательские заголовки для запроса Volley. На данный момент существует способ установить содержимое тела для запроса POST. У меня простой запрос GET, но мне нужно передать пользовательские заголовки вместе. Я не вижу, как класс JsonRequest поддерживает его. Это вообще возможно? Дайте мне знать, если вам нужна подробная информация …

Solutions Collecting From Web of "Как настроить пользовательский заголовок в запросе Volley"

Похоже, вы переопределите public Map<String, String> getHeaders() , определенную в Request , чтобы вернуть нужные HTTP-заголовки.

Принятый ответ с getParams () предназначен для установки данных тела POST, но вопрос в заголовке задал вопрос о том, как настроить HTTP-заголовки, такие как User-Agent. Как сказал CommonsWare, вы переопределяете getHeaders (). Вот пример кода, который устанавливает User-Agent в «Nintendo Gameboy» и Accept-Language на «fr»:

 public void requestWithSomeHttpHeaders() { RequestQueue queue = Volley.newRequestQueue(this); String url = "http://www.somewebsite.com"; StringRequest postRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // response Log.d("Response", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub Log.d("ERROR","error => "+error.toString()); } } ) { @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put("User-Agent", "Nintendo Gameboy"); params.put("Accept-Language", "fr"); return params; } }; queue.add(postRequest); } 

Если вам нужно отправить данные вместо добавления информации в URL-адрес.

 public Request post(String url, String username, String password, Listener listener, ErrorListener errorListener) { JSONObject params = new JSONObject(); params.put("user", username); params.put("pass", password); Request req = new Request( Method.POST, url, params.toString(), listener, errorListener ); return req; } 

Если то, что вы хотите сделать, это отредактировать заголовки в запросе, это то, что вы хотите сделать:

 // could be any class that implements Map Map<String, String> mHeaders = new ArrayMap<String, String>(); mHeaders.put("user", USER); mHeaders.put("pass", PASSWORD); Request req = new Request(url, postBody, listener, errorListener) { public Map<String, String> getHeaders() { return mHeaders; } } 

Вы можете увидеть это решение. Он показывает, как получить / установить файлы cookie, но файлы cookie – это только один из заголовков запроса / ответа. Вы должны переопределить один из классов * Запроса Volley и задать необходимые заголовки в getHeaders()


Вот связанный источник:

 public class StringRequest extends com.android.volley.toolbox.StringRequest { private final Map<String, String> _params; /** * @param method * @param url * @param params * A {@link HashMap} to post with the request. Null is allowed * and indicates no parameters will be posted along with request. * @param listener * @param errorListener */ public StringRequest(int method, String url, Map<String, String> params, Listener<String> listener, ErrorListener errorListener) { super(method, url, listener, errorListener); _params = params; } @Override protected Map<String, String> getParams() { return _params; } /* (non-Javadoc) * @see com.android.volley.toolbox.StringRequest#parseNetworkResponse(com.android.volley.NetworkResponse) */ @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { // since we don't know which of the two underlying network vehicles // will Volley use, we have to handle and store session cookies manually MyApp.get().checkSessionCookie(response.headers); return super.parseNetworkResponse(response); } /* (non-Javadoc) * @see com.android.volley.Request#getHeaders() */ @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = super.getHeaders(); if (headers == null || headers.equals(Collections.emptyMap())) { headers = new HashMap<String, String>(); } MyApp.get().addSessionCookie(headers); return headers; } 

}

И класс MyApp:

 public class MyApp extends Application { private static final String SET_COOKIE_KEY = "Set-Cookie"; private static final String COOKIE_KEY = "Cookie"; private static final String SESSION_COOKIE = "sessionid"; private static MyApp _instance; private RequestQueue _requestQueue; private SharedPreferences _preferences; public static MyApp get() { return _instance; } @Override public void onCreate() { super.onCreate(); _instance = this; _preferences = PreferenceManager.getDefaultSharedPreferences(this); _requestQueue = Volley.newRequestQueue(this); } public RequestQueue getRequestQueue() { return _requestQueue; } /** * Checks the response headers for session cookie and saves it * if it finds it. * @param headers Response Headers. */ public final void checkSessionCookie(Map<String, String> headers) { if (headers.containsKey(SET_COOKIE_KEY) && headers.get(SET_COOKIE_KEY).startsWith(SESSION_COOKIE)) { String cookie = headers.get(SET_COOKIE_KEY); if (cookie.length() > 0) { String[] splitCookie = cookie.split(";"); String[] splitSessionId = splitCookie[0].split("="); cookie = splitSessionId[1]; Editor prefEditor = _preferences.edit(); prefEditor.putString(SESSION_COOKIE, cookie); prefEditor.commit(); } } } /** * Adds session cookie to headers if exists. * @param headers */ public final void addSessionCookie(Map<String, String> headers) { String sessionId = _preferences.getString(SESSION_COOKIE, ""); if (sessionId.length() > 0) { StringBuilder builder = new StringBuilder(); builder.append(SESSION_COOKIE); builder.append("="); builder.append(sessionId); if (headers.containsKey(COOKIE_KEY)) { builder.append("; "); builder.append(headers.get(COOKIE_KEY)); } headers.put(COOKIE_KEY, builder.toString()); } } } 

Ищете решение этой проблемы. См. Здесь: http://developer.android.com/training/volley/request.html

Это хорошая идея напрямую использовать ImageRequest вместо ImageLoader? Похоже, ImageLoader использует его внутри себя. Пропустит ли он что-нибудь важное, кроме поддержки кеша ImageLoader?

 ImageView mImageView; String url = "http://i.imgur.com/7spzG.png"; mImageView = (ImageView) findViewById(R.id.myImage); ... // Retrieves an image specified by the URL, displays it in the UI. mRequestQueue = Volley.newRequestQueue(context);; ImageRequest request = new ImageRequest(url, new Response.Listener() { @Override public void onResponse(Bitmap bitmap) { mImageView.setImageBitmap(bitmap); } }, 0, 0, null, new Response.ErrorListener() { public void onErrorResponse(VolleyError error) { mImageView.setImageResource(R.drawable.image_load_error); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> params = new Map<String, String>(); params.put("User-Agent", "one"); params.put("header22", "two"); return params; }; mRequestQueue.add(request); 

попробуй это

 { @Override public Map<String, String> getHeaders() throws AuthFailureError { String bearer = "Bearer ".concat(token); Map<String, String> headersSys = super.getHeaders(); Map<String, String> headers = new HashMap<String, String>(); headersSys.remove("Authorization"); headers.put("Authorization", bearer); headers.putAll(headersSys); return headers; } }; 

Вы можете создать собственный класс запроса, который расширяет StringRequest и переопределяет метод getHeaders () внутри него следующим образом:

 public class CustomVolleyRequest extends StringRequest { public CustomVolleyRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { super(method, url, listener, errorListener); } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<>(); headers.put("key1","value1"); headers.put("key2","value2"); return headers; } } 
 public class CustomJsonObjectRequest extends JsonObjectRequest { public CustomJsonObjectRequest(int method, String url, JSONObject jsonRequest,Response.Listener listener, Response.ErrorListener errorListener) { super(method, url, jsonRequest, listener, errorListener); } @Override public Map getHeaders() throws AuthFailureError { Map headers = new HashMap(); headers.put("AppId", "xyz"); return headers; } } 

Здесь задаются заголовки из образца github:

 StringRequest myReq = new StringRequest(Method.POST, "http://ave.bolyartech.com/params.php", createMyReqSuccessListener(), createMyReqErrorListener()) { protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put("param1", num1); params.put("param2", num2); return params; }; }; queue.add(myReq); 

попробуй это

  public void VolleyPostReqWithResponseListenerwithHeaders(String URL,final Map<String, String> params,final Map<String, String> headers,Response.Listener<String> responseListener) { String url = URL; Log.i("url:", ":" + url); StringRequest mStringRequest = new StringRequest(Request.Method.POST, url, responseListener, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // error //Log.d("Error.Response", error.getLocalizedMessage()); } }){ @Override protected Map<String, String> getParams() { return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { return headers; } }; mStringRequest.setRetryPolicy(new DefaultRetryPolicy( 60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); mStringRequest.setShouldCache(true); // dialog.show(); SingletonRequestQueue.getInstance(context).addToRequestQueue(mStringRequest); }