2 votes

Retrofit ne peut pas analyser le corps correctement

Je ne parviens pas à analyser correctement la réponse de mon service web en utilisant Retrofit2 + Gson. J'ai implémenté des réponses similaires et toutes fonctionnent correctement. Le problème se produit lorsque le corps de la réponse renvoie un tableau d'objets personnalisés.

J'ai lu de nombreuses réponses sur stackoverflow et j'ai créé mes classes en utilisant les éléments suivants http://www.jsonschema2pojo.org/ mais pas du tout...

Je colle tout mon code. J'espère que vous pourrez m'aider. Merci !

Réponse du service Web

    {
    "code": "SUCCESS",
    "errorMessage": null,
    "data": [
        {
            "nickname": "David",
            "tiempoMiliseg": 49745,
            "fecha": "2017-07-14T13:59:12.000Z"
        },
        {
            "nickname": "kart 13",
            "tiempoMiliseg": 54034,
            "fecha": "2017-07-14T17:50:51.000Z"
        },
        {
            "nickname": "kart 26",
            "tiempoMiliseg": 54728,
            "fecha": "2017-07-14T17:50:51.000Z"
        },
        {
            "nickname": "kart 16",
            "tiempoMiliseg": 54845,
            "fecha": "2017-07-14T17:50:51.000Z"
        },
        {
            "nickname": "jonathan",
            "tiempoMiliseg": 55061,
            "fecha": "2017-07-14T19:12:57.000Z"
        },
        {
            "nickname": "kart 20",
            "tiempoMiliseg": 55187,
            "fecha": "2017-07-14T17:50:51.000Z"
        },
        {
            "nickname": "kart 5",
            "tiempoMiliseg": 55584,
            "fecha": "2017-07-14T15:51:53.000Z"
        },
        {
            "nickname": "kart 5",
            "tiempoMiliseg": 55926,
            "fecha": "2017-07-14T15:21:30.000Z"
        },
        {
            "nickname": "kart 19",
            "tiempoMiliseg": 56025,
            "fecha": "2017-07-14T18:34:01.000Z"
        },
        {
            "nickname": "kart 11",
            "tiempoMiliseg": 56403,
            "fecha": "2017-07-14T18:34:01.000Z"
        },
        {
            "nickname": "kart 22",
            "tiempoMiliseg": 56458,
            "fecha": "2017-07-14T15:51:53.000Z"
        },
        {
            "nickname": "kart 28",
            "tiempoMiliseg": 56467,
            "fecha": "2017-07-14T18:10:08.000Z"
        },
        {
            "nickname": "kart 2",
            "tiempoMiliseg": 56548,
            "fecha": "2017-07-14T18:10:08.000Z"
        },
        {
            "nickname": "kart 27",
            "tiempoMiliseg": 56620,
            "fecha": "2017-07-14T15:51:53.000Z"
        },
        {
            "nickname": "kart 27",
            "tiempoMiliseg": 56629,
            "fecha": "2017-07-14T18:34:01.000Z"
        },
        {
            "nickname": "kart 20",
            "tiempoMiliseg": 56827,
            "fecha": "2017-07-14T18:34:01.000Z"
        },
        {
            "nickname": "kart 26",
            "tiempoMiliseg": 56846,
            "fecha": "2017-07-14T18:56:31.000Z"
        },
        {
            "nickname": "kart 28",
            "tiempoMiliseg": 57071,
            "fecha": "2017-07-14T18:34:01.000Z"
        },
        {
            "nickname": "kart 26",
            "tiempoMiliseg": 57088,
            "fecha": "2017-07-14T18:34:01.000Z"
        },
        {
            "nickname": "kart 29",
            "tiempoMiliseg": 57143,
            "fecha": "2017-07-14T18:34:01.000Z"
        }
    ]
}

Classe de réponse de rétrofit

public class RankingResponse {

@SerializedName("code")
@Expose
private String code;
@SerializedName("errorMessage")
@Expose
private Object errorMessage;
@SerializedName("data")
@Expose
private List<Datum> data = null;

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public Object getErrorMessage() {
    return errorMessage;
}

public void setErrorMessage(Object errorMessage) {
    this.errorMessage = errorMessage;
}

public List<Datum> getData() {
    return data;
}

public void setData(List<Datum> data) {
    this.data = data;
}

@Override
public String toString() {
    return "RankingResponse{" +
            "code='" + code + '\'' +
            ", errorMessage=" + errorMessage +
            ", data=" + data +
            '}';
}

public class Datum {
    @SerializedName("nickname")
    @Expose
    private String nickname;
    @SerializedName("tiempoMiliseg")
    @Expose
    private Integer tiempoMiliseg;
    @SerializedName("fecha")
    @Expose
    private String fecha;

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public Integer getTiempoMiliseg() {
        return tiempoMiliseg;
    }

    public void setTiempoMiliseg(Integer tiempoMiliseg) {
        this.tiempoMiliseg = tiempoMiliseg;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    @Override
    public String toString() {
        return "Datum{" +
                "nickname='" + nickname + '\'' +
                ", tiempoMiliseg=" + tiempoMiliseg +
                ", fecha='" + fecha + '\'' +
                '}';
    }
}

}

Client pour la rénovation

public class RetrofitClient {

    private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl) {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

Réponse de rétrofit

enter image description here

0voto

M.Saad Lakhan Points 1640

Dans votre classe RankingResponse, remplacez ce qui suit :

@SerializedName("data")
@Expose
private List<Datum> data = null;

avec :

@SerializedName("data")
private List<Datum> data =  new ArrayList<Datum>();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X