Retrofit 2.0 cómo eliminar?

Estoy utilizando retrofit 2.0 y estoy implementando una función de eliminación en mi aplicación de Android, sin embargo, no puedo hacerlo con éxito, ¿alguien puede darme una sugerencia?

He intentado ambos:

@DELETE("books/{id}") void deleteBook(@Path("id") int itemId); @DELETE("books/{id}") void deleteBook(@Path("id") int bookId, Callback<Response> callback); 

Tengo error java.lang.IllegalArgumentException: Los métodos de servicio no pueden devolver void. Para el método LibraryService.deleteBook.

También me dio una prueba en esto:

 Response deleteBook(@Path("id") int bookId); 

Call<Response> deleteBook(@Path("id") int bookId);

No importa que utilizo okhttp3.Response o retrofit2.Response, obtendré el error: '* .Response' no es un tipo de cuerpo de respuesta válido. ¿Quiso decir ResponseBody?

¿Puede alguien darme un ejemplo exitoso de eliminación? Busqué en línea pero no encuentro suficiente información. Muchas gracias.

Hazlo de esta manera como notaste el pasado:

 Call<ResponseBody> deleteBook(@Path("id") int bookId); 

Asegúrese de hacer la llamada fuera de la interfaz de usuario mediante AsyncTask o algún otro mecanismo de subprocesamiento. No estoy seguro si has usado RxJava + Retrofit 2 antes, pero es agradable.

El objeto ResponseBody devolverá los resultados de la llamada. Es lo que uso para algunas solicitudes de REST API que no devuelven un objeto de entidad, y todo lo que me importa es mirar el código de respuesta.

 Call<ResponseBody> deleteRequest = mService.deleteBook(123); deleteRequest.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { // use response.code, response.headers, etc. } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { // handle failure } }); 

O, sugiere Jake Wharton

Use Void, que no sólo tiene una mejor semántica, sino que es (un poco) más eficiente en el caso vacío y mucho más eficiente en un caso no vacío (cuando no le importa el cuerpo).

Así que tienes:

 Call<Void> deleteBook(@Path("id") int bookId); 

Uso:

 deleteRequest.enqueue(new Callback<Void>() { @Override public void onResponse(Call<Void> call, Response<Void> response) { // use response.code, response.headers, etc. } @Override public void onFailure(Call<Void> call, Throwable t) { // handle failure } }); 

Esto es mejor si todo lo que te importa es el código de respuesta y ningún cuerpo a la respuesta

EDIT 2: Eliminar la definición de devolución de llamada adecuada. Arreglado

  • Establecer url de base dinámica utilizando Retrofit 2.0 y Dagger 2
  • ¿Qué está causando HTTP FALLA: java.net.SocketException: Socket cerrado?
  • Cómo crear varias devoluciones de Retrofit en el mismo fragmento - android
  • Problema del tipo de contenido de Retrofit-2
  • Prueba de unidad JVM con Mockito para pruebas Retrofit2 y RxJava para solicitudes de red
  • OkHttpClient lanza excepción después de actualizar a OkHttp3
  • Retrofit 2.0 lanzando "IllegalArgumentException: los parámetros @Field solo se pueden usar con la codificación de formularios". ¿Cómo hacer la consulta correcta de la API y arreglarlo?
  • HTTPS con Retrofit y OkHttp Handshake falló
  • Retrofit 2 Callback onResponse en el subproceso de fondo
  • Cómo resolver java.lang.AssertionError al crear OkHttpClient en mockito?
  • Broken Pipe al intentar cargar una actualización de archivo grande 2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.