Intereting Posts
Получение ОДИНОЧНОГО курсора с полными именами и номерами телефонов ViewPager пустой на обратной стороне от другого фрагмента Как реализовать виджет поиска в Action Bar Sherlock? Элемент jQuery mobile + phonegap select отображает параметры очень медленно Расширение SSL для приложений Android Android: Как я могу настроить изображения, которые находятся в gridview? Исключение для https handshake для Android https Как предотвратить автоматическое восстановление Retrofit после 302 Как установить значок Font Awseome на плавающей кнопке Action? Альтернативы xml, разрабатывая макет приложения для Android. Ошибка прерывания RequestFactory в Eclipse Поддержка телефона и планшета для расстояния между кнопками в макете Android: Как предотвратить передачу каких-либо событий касания от представления к тому, что находится под ним? Сбой приложений при выполнении с использованием карт Google api v2 WakeLock финализировалась, хотя все еще была ошибка, хотя я ее выпускаю

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

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

Похоже, вы переопределите 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); }