Редактировать:
Как отмечает Джейк Уортон,
@GET("/path/to/get")
Call<Void> getMyData(/* your args here */);
это лучший способ пойти против моего первоначального ответа -
Вы можете просто вернуть ResponseBody
, что позволит обойти синтаксический анализ ответа.
@GET("/path/to/get")
Call<ResponseBody> getMyData(/* your args here */);
Тогда в вашем звонке
Call<ResponseBody> dataCall = myApi.getMyData();
dataCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Response<ResponseBody> response) {
// use response.code, response.headers, etc.
}
@Override
public void onFailure(Throwable t) {
// handle failure
}
});
Void
который не только имеет лучшую семантику, но и (немного) более эффективен в пустом случае и намного эффективнее в непустом случае (когда вам просто наплевать на тело).Void
. Будет ли использованиеUnit
кода Kotlin таким же преимуществом, как и использованиеVoid
Java for Retrofit?Unit
в Котлине НЕ работает,Void
но работает. Я предполагаю, что где-то есть жестко запрограммированная проверка.Если вы используете RxJava, то
Completable
в этом случае лучше использоватьhttp://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Completable.html
в принятом ответе:
Если конечная точка возвращает код ответа об ошибке, он все равно будет находиться в,
onNext
и вам придется проверить код ответа самостоятельно.Однако, если вы используете
Completable
.у вас будет только
onComplete
иonError
. если код ответа успешен, он сработает,onComplete
иначе сработаетonError
.источник
onError
Throwable
в таком случае будет содержать аргумент? Я нахожу этот очиститель, но нам часто все равно нужно смотреть код и тело ответа на предмет сбоев.Если вы используете rxjava, используйте что-то вроде:
источник
Вот как я использовал его с Rx2 и Retrofit2, с запросом PUT REST: у моего запроса было тело json, но только код ответа http с пустым телом.
Клиент Api:
Интерфейс:
Затем использовать:
источник