Comment pouvons-nous gérer les différents type de réponse à Rénover 2?
J'ai un webservice qui renvoie une liste de sérialisé MyPOJO objets:
[
{ //JSON MyPOJO },
{ //JSON MyPOJO }
]
soit une erreur de l'objet :
{
'error': 'foo',
'message':'bar'
}
À l'aide de retrofit2, comment puis-je récupérer l'erreur ?
Call<List<MyPOJO>> request = ...
request.enqueue(new Callback<List<MyPOJO>>() {
@Override
public void onResponse(Response<List<MyPOJO>> response) {
if (response.isSuccess()) {
List<MyPOJO> myList = response.body();
//do something with the list...
} else {
//server responded with an error, here is how we are supposed to retrieve it
ErrorResponse error = ErrorResponse.fromResponseBody(apiService.getRetrofitInstance(), response.errorBody());
processError(error);
//but we never get there because GSON deserialization throws an error !
}
}
@Override
public void onFailure(Throwable t) {
if(t instanceof IOException){
//network error
}else if(t instanceof IllegalStateException){
//on server sending an error object we get there
//how can I retrieve the error object ?
}else {
//default error handling
}
}
}
Ici est la GSON exception:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Rénovation instance est créée à l'aide de GsonConverterFactory
Déjà demandé, stackoverflow.com/questions/24279245/...
pour être juste, que la précédente question est posée à propos de de Rénovation 1.. c'est sur de Rénovation 2.
pour être juste, que la précédente question est posée à propos de de Rénovation 1.. c'est sur de Rénovation 2.
OriginalL'auteur Rémy DAVID | 2016-02-23
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire et je l'ai résolu en utilisant un générique
Object
et le test de ce type de réponse que j'ai eue à l'aide de instanceofDans mon cas, j'avais MyPOJO ou MyError retourné et je pouvais être sûr qu'il serait l'un de ces.
Dans d'autres cas, puis j'ai eu le backend de retour le même Objet de Réponse, peu importe si la demande a été acceptée ou non.
Puis à l'intérieur de cet objet de réponse j'ai eu mes données réelles à l'intérieur d'un champ "Objet". Alors je peux utiliser instance de déterminer le type de données que j'ai eu. Dans ce cas, j'ai toujours eu le même objet retourné, peu importe ce que l'appel a été.
OriginalL'auteur jason.kaisersmith
pas de travail pour moi...parce qu'il n'est pas d'atteindre onresponse(), à sortir du erreur interne à l'intérieur rénovation
OriginalL'auteur Deven Mer