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:
- Retrofit "IllegalStateException: Ya ejecutado"
- OkHttp3 caché parece estar desmarcada con Retrofit 2
- Retrofit post utilizando Firebase
- Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform en Android
- Retrofit2 y kotlin
@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.
- Cómo agregar varios encabezados con ok Http
- Android: pasar dinámicamente la clase del modelo a retroalimentar la devolución de llamada
- Manejo de errores de llamada síncrono de Retrofit 2 para errores 4xx
- Android Retrofit2 reddit 404 no encontrado
- Utilizar RxJava para encadenar la solicitud en un solo hilo
- Retrofit v2 ¿Call.cancel () elimina la devolución de llamada?
- Parámetro de reequipamiento
- Error al cargar un archivo con Retrofit 2
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
- ¿Cómo prueba un solo / pequeño grupo de desarrolladores en varios dispositivos?
- AnimationDrawable programaticamente sin animation-list xml