Échec de la conversion rétrospective renvoie RetrofitError.response comme nulle
À l'aide de Rénovation 1.6.0, OkHTTP 2.0.0, et OkHTTP-UrlConnection 2.0.0.
Je suis en train de faire un POST pour un service à l'aide de Rénovation à une URL qui n'existe pas. La défaillance de la fonction de rappel est appelée, comme prévu. Cependant, la RetrofitError paramètre n'a pas de réponse. Je tiens vraiment à saisir le code d'état HTTP, qui était retourné à l'aide de
error.getResponse().getStatus()
mais depuis getResponse() renvoie null, je ne peux pas.
Pourquoi est getResponse() null et comment puis-je obtenir le statut de?
Grâce.
Aussi, l'erreur que je reçois est UnknownHostException, comme prévu. Répéter: je suis dans l'attente de cette erreur. Je veux savoir comment obtenir le code de statut HTTP ou pourquoi erreur.getResponse() renvoie la valeur null.
Edit: Voici un code:
RestAdapterBuilderClass.java
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://badURL.DoesntMatter/");
.setRequestInterceptor(sRequestInterceptor)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
sService = restAdapter.create(ServiceInterface.class);
ServiceInterface.java
@POST("/Login")
void login(@Body JsonObject body, Callback<String> callback);
CallbackClass.java
@Override
public void failure(RetrofitError error) {
if (error.getResponse() == null) {
//error.getResponse() is null when I need to get the status code
//from it.
return;
}
}
source d'informationauteur Marc
Vous devez vous connecter pour publier un commentaire.
Lorsque vous obtenez une UnknownHostException cela signifie, que vous n'étiez pas en mesure d'établir une connexion au serveur. Vous ne pouvez pas, en effet, s'attendre à un statut HTTP dans ce cas.
Naturellement, vous obtenez seulement une réponse Http (et avec un statut) où vous pouvez vous connecter à un serveur.
Même lorsque vous obtenez un code d'état 404, vous faites une connexion au serveur. Ce n'est pas le même comme un UnknownHostException.
La getResponse() peut retourner la valeur null si vous n'obtenez pas une réponse.
RetrofitError
a une méthode appeléeisNetworkError()
que vous pouvez utiliser pour détecter une demande qui a échoué en raison de problèmes de réseau. J'ai l'habitude d'ajouter une petite méthode d'assistance comme ceci:et ensuite utiliser ce résultat pour traiter toute autre erreur de logique (déconnexion sur la 401, afficher un message d'erreur sur 500,...).
Je suis à l'aide de Rénovation 2. Lors de l'url du point de terminaison de fin avec le "/" comme dans votre cas, et de nouveau dans votre interface, il commence par "/" [@POST("/Login")] les causes de ce problème. Enlever le "/" de .setEndpoint() la méthode
Juste pour élargir sur @lyio de réponse, j'ai trouvé à partir de Tissu de l'enregistrement qui getKind() retourne parfois INATTENDUS et puis, si vous analysez le message que vous obtenez des délais d'attente et les problèmes de connexion j'ai donc écrit la classe utilitaire ci-dessous.
}