Comment gérer l'erreur dans la Rénovation 2.0
Je veux gérer l'erreur dans la Rénovation 2.0
Obtenu par exemple code=404
et body=null
, mais errorBody()
contient des données dans ErrorModel
(Boolean status
et String info
).
C'est errorBody().content
: [text=\n{"status":false,"info":"Provided email doesn't exist."}]
.
Comment puis-je obtenir ces données?
Merci de m'aider!
C'est mon code pour la Rénovation de la demande:
ResetPasswordApi.Factory.getInstance().resetPassword(loginEditText.getText().toString())
.enqueue(new Callback<StatusInfoModel>() {
@Override
public void onResponse(Call<StatusInfoModel> call, Response<StatusInfoModel> response) {
if (response.isSuccessful()) {
showToast(getApplicationContext(), getString(R.string.new_password_sent));
} else {
showToast(getApplicationContext(), getString(R.string.email_not_exist));
}
}
@Override
public void onFailure(Call<StatusInfoModel> call, Throwable t) {
showToast(getApplicationContext(), "Something went wrong...");
}
});
- pouvez-vous mettre un peu de code
- Ce code vous dire?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez obtenir des données lors de la réponse à l'erreur vient (généralement un code de réponse à l'exception de 200) vous pouvez le faire comme ça dans votre
onResponse()
méthode:Lors de la génération de
YourErrorPojo.class
faire les étapes suivantes :Aller à Json Schema 2 Pojo
Coller votre exemple
Json
, et de sélectionner le type de source Json , annotation GsonVotre exemple
Json
est :{"status":false,"info":"Provided email doesn't exist."}
Pojo
de classe pour vous.Ajouter à votre
build.gradle
:compile 'com.google.code.gson:gson:2.7'
J'ai utilisé
Gson
dans cette solution, mais vous pouvez obtenir votreJson
comme :response.errorBody().string()
et de le gérer, de faire qch ce que vous voulez.Gson gson = new GsonBuilder().create();
StatusInfoModel error = new StatusInfoModel();
try { error = gson.fromJson(response.errorBody().string(), StatusInfoModel.class);
showToast(getApplicationContext(), error.getInfo());
} catch (IOException e) { // handle failure to read error }
, mais il y a une erreur:Class must either be declared abstract or implement abstract method
.else
déclaration d'erreur disparaît.{ "code" : 401, "message": "Authorization has been denied" }
De rénovation ne voit pas de 404 comme un échec, alors il entrera dans la onSuccess.
response.isSuccessful()
est vrai si le code de réponse est de l'ordre de 200 à 300, et donc il va entrer dans l'autre là.Cependant car votre réponse n'a pas réussi, vous n'obtenez pas le corps de la réponse avec
.body()
, mais avecerrorBody()
, errorBody sera remplie lorsque la demande a été un succès, maisresponse.isSuccessful()
renvoie la valeur false (donc dans le cas d'un code de statut qui n'est pas 200-300).String errorMsg
à chaque fois, quand je peux (au moins je crois que je peux) obtenu sierrorBody()
.errorBody
est pour quand une erreur se produit, qui ne s'applique pas dans le cas de la 404. 404 est vu comme une réussiteerrorBody()
, pas dansbody()
?errorBody
contient la réponse, si la réponse n'a pas été couronnée de succès. Ainsi dans le cas où il n'y a pas d'erreur, mais le code de statut n'a pas été 200-300. Code d'état 404 aura la réponse dans errorBody comme vous l'avez ditJe suis en utilisant cette bibliothèque Retrobomb, vous n'avez pas à sérialiser à ce niveau.
il est facile à utiliser et à personnaliser. Il prend en charge les annotations pour chaque type d'erreur ou un code d'erreur.
Si vous préférez, vous pouvez déballer toutes les erreurs et les traiter par vous-même.
Si vous souhaitez obtenir des données lors de la réponse à l'erreur vient (en général, un code de réponse à l'exception de 200), vous pouvez le faire comme ça dans votre onResponse() méthode: