#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(), все, что вам нужно сделать, это переопределить этот метод и вернуть необходимые пользовательские заголовки:
Пример использования приведен ниже:
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 );