Intereting Posts
Последний элемент списка Listview отключен Фотосъемка с программным обеспечением на Android Эффективное выполнение пакетного SQL-запроса на Android, для базы данных обновления Сканер документов для Android с использованием opencv Скомпилированные ресурсы Android – resources.arsc Добавить файл изображения для формирования данных – Кордова / Угловая Модернизация сети делает сетевые вызовы в основном потоке? Почему adb install <same-packagename-always-release> терпит неудачу? Объявление Admob не загружается. Ошибка 2. Он работал раньше, но внезапно остановился Как включить экран? Что является лучшим механизмом для сохранения хранилища ключевых значений на android (с большими значениями) Какая версия JDK (уровень языка) требуется для Android Studio? Как рисовать линию на изображении вместе с пальцем в android В чем разница между getExtras и getBundleExtras? Android – отображает постоянное представление обо всех действиях

Модернизация 2.0 как удалить?

Я использую retrofit 2.0, и я реализую функцию удаления в своем приложении для Android, однако я не могу сделать это успешно, может кто-нибудь дать мне предложение?

Я попробовал оба:

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

Я получаю ошибку java.lang.IllegalArgumentException: методы службы не могут вернуть void. Для метода LibraryService.deleteBook.

Я также попытался:

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

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

Независимо от того, я использую okhttp3.Response или retrofit2.Response, я получу ошибку: «* .Response» не является допустимым типом тела ответа. Вы имели в виду ResponseBody?

Может ли кто-нибудь дать мне успешный пример удаления? Я googled онлайн, но не могу найти достаточно информации. Большое спасибо.

Solutions Collecting From Web of "Модернизация 2.0 как удалить?"

Сделайте это так, как вы отметили последнее:

 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 } }); 

Это лучше, если все, о чем вы заботитесь, – это код ответа и отсутствие ответа на него

EDIT 2: Исключить правильное определение обратного вызова. Исправлена ​​:)