Bearbeiten:
Wie Jake Wharton betont,
@GET("/path/to/get")
Call<Void> getMyData(/* your args here */);
ist der beste Weg gegen meine ursprüngliche Antwort -
Sie können einfach a zurückgeben ResponseBody
, wodurch das Parsen der Antwort umgangen wird.
@GET("/path/to/get")
Call<ResponseBody> getMyData(/* your args here */);
Dann in Ihrem Anruf,
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
die nicht nur eine bessere Semantik aufweist, sondern im leeren Fall (geringfügig) effizienter und im nicht leeren Fall weitaus effizienter ist (wenn Sie sich nur nicht um den Körper kümmern).Void
. Würde die VerwendungUnit
in Kotlin-Code den gleichen Vorteil wieVoid
in Java für Retrofit bieten?Unit
in Kotlin funktioniert das NICHT,Void
funktioniert aber. Ich gehe davon aus, dass es irgendwo einen fest codierten Scheck gibt.Wenn Sie RxJava verwenden, ist es
Completable
in diesem Fall besser, es zu verwendenhttp://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Completable.html
in der akzeptierten Antwort:
Wenn der Endpunkt einen Fehlerantwortcode zurückgibt, befindet er sich weiterhin im
onNext
und Sie müssen den Antwortcode selbst überprüfen.Wenn Sie jedoch verwenden
Completable
.Sie werden nur
onComplete
und habenonError
. Wenn der Antwortcode erfolgreich ist, wird er ausgelöst,onComplete
andernfalls wird er ausgelöstonError
.quelle
onError
Throwable
Argument in diesem Fall enthalten? Ich finde das sauberer, aber wir müssen oft noch den Antwortcode und den Text auf Fehler überprüfen.Wenn Sie rxjava verwenden, verwenden Sie Folgendes:
quelle
So habe ich es mit Rx2 und Retrofit2 mit PUT REST-Anfrage verwendet: Meine Anfrage hatte einen JSON-Body, aber nur einen http-Antwortcode mit einem leeren Body.
Der Api-Client:
Die Schnittstelle:
Dann, um es zu benutzen:
quelle