Ответ 1
Сделайте это так, как вы отметили последнее:
Call<ResponseBody> deleteBook(@Path("id") int bookId);
Убедитесь, что вы отключили UI-поток через AsyncTask или какой-либо другой механизм потоковой передачи. Не уверен, что раньше вы использовали RxJava + Retrofit 2, но это хорошо.
Объект ResponseBody вернет результаты вызова. Это то, что я использую для некоторых запросов API REST, которые не возвращают объект сущности, и все, о чем я забочусь, просматривает код ответа.
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
}
});
Или, Джейк Уортон предлагает
Используйте Void, который не только имеет лучшую семантику, но (немного) более эффективен в пустом случае и значительно более эффективен в непустом случае (когда вы просто не заботитесь о теле).
Итак, у вас есть:
Call<Void> deleteBook(@Path("id") int bookId);
Использование:
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
}
});
Это лучше, если все, о чем вы заботитесь, - это код ответа, а тело - ответ
ИЗМЕНИТЬ 2: Исключить правильное определение обратного вызова. Исправлено:)