2015-09-02 2 views
1

Можно ли отправить простой текст в тело StringRequest с помощью метода DELETE?Запрос на волейбол в Android с телом

Я не мог найти ни одного примера, где кто-то помещает что-то в тело запроса ... Это мой запрос, и я хочу добавить «{'deviceid': 'xyz'}" в тело (метод является DELETE):

final StringRequest stringRequest = new StringRequest(method, url + "?token=" + token, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String jsonResponse) { 
      // do something 
    }, new Response.ErrorListener() { 
      // do something 
     } 
    }) { 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("api-version", "1"); 

      return headers; 
     } 
    }; 
+0

Написать собственный запрос и '' override' getBody() 'и' getBodyContentType() 'методы. –

+0

Если ваша серверная сторона - это Asp.Net WebAPI, IMO, вы должны прочитать [этот вопрос] (http://stackoverflow.com/questions/25783542/reason-behind-get-delete-cannot-have-body-in-webapi) и [еще один вопрос] (http://stackoverflow.com/questions/299628/is-an-entity-body-allowed-for-an-http-delete-request). Возможно, другой webservice тот же – BNK

+0

Спасибо за оба ответа! @ dieter_h Не могли бы вы разместить пример быстрого кода, пожалуйста? –

ответ

3

Попробуйте это:

public class StringJSONBodyReqest extends StringRequest { 

    private static final String TAG = StringJSONBodyReqest.class.getName(); 
    private final String mContent; 

    public StringJSONBodyReqest(int method, String url, String content, Response.Listener<String> listener, Response.ErrorListener errorListener) { 
     super(method, url, listener, errorListener); 
     mContent = content; 
    } 


    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("api-version", "1"); 

     return headers; 
    } 


    @Override 
    public byte[] getBody() throws AuthFailureError { 

     byte[] body = new byte[0]; 
     try { 
      body = mContent.getBytes("UTF-8"); 
     } catch (UnsupportedEncodingException e) { 
      Log.e(TAG, "Unable to gets bytes from JSON", e.fillInStackTrace()); 
     } 
     return body; 
    } 


    @Override 
    public String getBodyContentType() { 
     return "application/json"; 
    } 
} 

mContent ваш JSON String

+0

Спасибо за этот ответ, но тело по-прежнему игнорируется. Если я использую DELETE в Postman, все, похоже, работает, поэтому мой сервер в порядке. Любая другая идея о том, как заставить Volley отправить тело? –

+0

Я не слышу никаких других методов. –

1

Это потому, что Volley не отправляет тело для DELETE по умолчанию. Только для POST, PUT и PATCH. Неудачный сказать наименее

Существует обходной путь для того, перечислены здесь: Volley - how to send DELETE request parameters?