Intereting Posts
Обновленные представления настроек при использовании функции предпочтения Использование акселерометра, гироскопа и компаса для расчета движения устройства в 3D-мире Как проверить, имеет ли EditText в Android смайлик или нет? Прокрутите макет обновления в Android-фрагменте Стрелка отметит полилинию в Google Google Маршрут карты Есть ли способ скрыть системную панель в Android 3.0? Это внутреннее устройство, и я управляю навигацией Любой инструмент для конвертирования XML-данных Android в файл .strings от iPhone? Использование intelliJ с gradle OFFLINE для разработки android При прокрутке пользовательского ListView изменяется значение флажка Android – активность, которая не заполняет родительский экран Скрыть infoWindow при щелчке по маркеру второй раз (Google Maps Android API V2) Android, получающий изображение из галереи, вращается Не удалось зажать масштаб эмулятора SSLHandshakeException на Android 4.4 и ниже Разница между android.support.v7.app.AlertController.RecycleListView и android.support.v7.widget.RecyclerView

Как настроить пользовательский заголовок в запросе 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); }