gson pour objet POJO, ne fonctionne pas correctement
Question
Je développe une application Android et j'accès à un service web REST qui retourne une JSON. Ce JSON Je veux mettre dans POJO mais je pense que je manque quelque chose comme ça ne fonctionne pas.
Le JSON retuned est comme suit:
[{ "CategoryName": "Food", "Id": 1}, { "CategoryName": "Car", "Id": 2}, { "CategoryName": "House", "Id": 3 }, { "CategoryName": "travail", "Id": 4}]
est retournée dans la variable de réponse
String response = client.getResponse();
Et maintenant, je procédez comme suit:
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
JSONObject j;
MainCategories cats = null;
try
{
j = new JSONObject(response);
cats = gson.fromJson(j.toString(), MainCategories.class);
}
catch(Exception e)
{
e.printStackTrace();
}
L'erreur que je reçois est:
09-02 07: 06: 47,009: WARN / System.err (568): org.json.JSONException: Valeur [{ "Id": 1, "CategoryName": "Food"}, { "id": 2, "CategoryName": "Car"}, { "id": 3, "CategoryName": "House"}, { "Id": 4, "CategoryName": "travail"}] de type org.json.JSONArray ne peut pas être converti en JSONObject 09-02 07: 06: 47,029: WARN / System.err (568): à org.json.JSON.typeMismatch (JSON.java:107)
Voici les objets POJO MainCategories.java
public class MainCategories {
private List<CategoryInfo> category;
public List<CategoryInfo> getCategory() {
if (category == null) {
category = new ArrayList<CategoryInfo>();
}
return this.category;
}
}
CategoryInfo.java
public class CategoryInfo {
public String categoryName;
public Integer id;
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String value) {
this.categoryName = ((String) value);
}
public Integer getId() {
return id;
}
public void setId(Integer value) {
this.id = value;
}
}
Pour accéder au service Web que j'utilise la classe de: http://lukencode.com/2010/04/27/calling-web-services-in-android-using-httpclient/
S'il vous plaît aidez-moi que je suis coincé pendant 2 jours maintenant et ne peut pas comprendre comment continuer. J'ai trouvé quelques sujets ici mais n'a toujours pas trouvé un moyen de contourner. Merci beaucoup.
La solution
Top entité de niveau dans votre chaîne JSON est JSONArray pas JSONObject, alors que vous essayez de l'analyser comme objet. Créer un tableau de la chaîne et l'utiliser.
JSONArray array = new JSONArray(response);