Le serveur renvoie actuellement un json qui ressemble au json donné ci-dessous, il contient un champ appelé data
qui est un tableau de tableaux, chaque tableau comportant plusieurs objets et chaque objet ayant une clé appelée item_type
. La clé item_type
me permet de savoir exactement de quel type d'objet il s'agit afin de pouvoir le convertir en conséquence en Java, mais je ne parviens pas à lire le code de l'objet. item_type
champ.
{
"page":1,
"data":[
[
{
"id":1,
"name":"xyz",
"item_type":1
}
],
[
{
"cid":1,
"item_type":2
}
],
[
{
"item":1,
"item_type":3
}
]
]
}
L'interface de rétrofit se présente comme suit
@GET("Search")
Observable<SearchResults> search(@Query(ParamsHolder.GET_QUERY)
String query, @Query(ParamsHolder.GET_PAGE) int page);
où le SearchResults
ressemble à ceci
public class SearchResults {
int page;
List<List<Object>> data;
public int getPage() {
return page;
}
public List<List<Object>> getData() {
return data;
}
}
Je suis capable de récupérer les données sans problème, mais j'ai besoin de lire les objets qui se trouvent dans chaque liste. Pour ce faire, j'ai utilisé le code suivant
public class SearchItem {
int item_type;
public int getItemType() {
return item_type;
}
}
List<List<Object>> data = objects.getData();
for (int i = 0; i < data.size(); i++) {
List<Object> list = data.get(i);
for (int j = 0; j < list.size(); j++) {
SearchItem item = (SearchItem) list.get(i);
Log.d("search", " json=" + list.get(j).toString());
Log.d("search", " item=" + item.toString() + " type=" + item.getItemType());
}
}
J'ai créé une fausse SearchItem
qui, je l'ai supposé, me permettrait d'utiliser la classe Object
pour que je puisse lire le item_type
ce qui me permettrait de savoir exactement de quel type d'objet il s'agit.
Une erreur s'est produite com.google.gson.internal.LinkedTreeMap cannot be cast to in.example.models.SearchItem
L'objectif final est de pouvoir attribuer à chaque objet du tableau le type correct, et la seule façon d'y parvenir est de lire les données du tableau. item_type
dans l'objet