Obtenir code d'état de réponse à l'aide de Rénovation 2.0 et RxJava
Je suis en train de mettre à niveau à Rénover 2.0 et ajouter RxJava dans mon projet android. Je suis en train de faire un appel d'api et souhaitez récupérer le code d'erreur en cas d'erreur de réponse du serveur.
Observable<MyResponseObject> apiCall(@Body body);
Et dans le RxJava appel:
myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MyResponseObject myResponseObject) {
//On response from server
}
});
En Rénovation 1.9, le RetrofitError toujours existé et nous avons pu obtenir le statut en faisant:
error.getResponse().getStatus()
Comment faites-vous cela avec de Rénovation 2.0 à l'aide de RxJava?
Vous devez vous connecter pour publier un commentaire.
Au lieu de déclarer l'appel d'API comme vous l'avez fait:
Vous pouvez également déclarer comme ceci:
Vous aurez alors un Abonné comme suit:
Donc, les réponses du serveur avec un code d'erreur sera également livré à
onNext
et vous pouvez obtenir le code en appelantreponse.code()
.http://square.github.io/retrofit/2.x/retrofit/retrofit/Response.html
EDIT: OK, j'ai enfin réussi à la réflexion sur ce e-nouri a dit dans son commentaire, à savoir que seuls 2xx codes à
onNext
. S'avère que nous sommes tous les deux raison:Si l'appel est déclaré comme ceci:
ou même ce
tous réponses finira dans
onNext
, indépendamment de leur code d'erreur. Cela est possible parce que tout est enveloppé dans uneResponse
objet en Rénovation.Si, d'autre part, l'appel est déclaré comme ceci:
ou ce
en effet que les réponses 2xx ira à
onNext
. Tout le reste sera enveloppé dans unHttpException
et envoyé àonError
. Ce qui permet également de sens, parce que sans laResponse
wrapper, ce devrait être émis àonNext
? Étant donné que la demande n'a pas réussi la seule chose sensée à émettre seraitnull
...onNext
y compris 404, etc. J'ai utilisé de Rénovation v2.0.0-beta3.GsonConverterFactory
, tout commeRetrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
, Comment faire pour obtenir l'original de la réponse?Observable<Response<MyResponseObject>> apiCall(@Body body);
- que par l'édition que vous avez fait, à moi, il ne fait aucun sens pour gérer la vérification des erreurs lors de laonNext()
est appelé sorte de va à l'encontre de la Rx Philosophie - vous suffira d'y ajouter de la complexité de devoir vérifier les erreurs dans onNext() à chaque fois sûrement?Response
. J'ai rarement l'utiliser trop mais je pense qu'il est bon de savoir qu'il existe.À l'intérieur de onError méthode de mettre pour cela obtenir le code
HttpException
. Je suis à l'aide de RxJava et j'ai besoin d'analyser la réponse après la réception d'uneHTTP 400 BAD REQUEST
. Merci beaucoup!Vous devriez noter que Retrofit2 toutes les réponses avec le code 2xx sera appelée à partir de onNext() de rappel et le reste de HTTP codes comme 4xx, 5xx sera appelé sur le onError() de rappel, à l'aide de Kotlin je suis venu avec quelque chose comme cela dans la onError() :