私はレトロフィット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ですか?
誰かが私に成功した削除の例を教えてもらえますか?私はオンラインでグーグルで検索しましたが、十分な情報が見つかりません。どうもありがとう。
最後に書き留めたように、次のようにします。
Call<ResponseBody> deleteBook(@Path("id") int bookId);
AsyncTaskまたはその他のスレッド化メカニズムを介して、UIスレッドから呼び出しを行うようにしてください。以前にRxJava + Retrofit 2を使用したことがあるかどうかはわかりませんが、それは素晴らしいことです。
ResponseBodyオブジェクトは、呼び出しの結果を返します。これは、エンティティオブジェクトを返さない一部のREST APIリクエストに使用するものであり、気になるのは応答コードを確認することだけです。
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:適切なコールバック定義を省略しました。修繕 :)