2010-09-02 2 views
0

Я разрабатываю приложение для Android, и я получаю доступ к веб-службе RESTfull, которая возвращает JSON. Этот JSON я хочу поместить его в POJO, но я думаю, что у меня что-то не хватает, поскольку оно не работает.gson to POJO object, не работает должным образом

JSON перенастроена выглядит следующим образом:

[{ "CategoryName": "Питание", "Id": 1}, { "CategoryName": "автомобиль", "Id": 2}, {» CategoryName ":" Дом», "Id": 3}, { "CategoryName": "Работа", "Id": 4}]

это возвращается в ответ переменной

String response = client.getResponse(); 

А теперь я попробуйте следующее:

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(); 
} 

Ошибки я получаю:

09-02 07: 06: 47,009: WARN/System.err (568): org.json.JSONException: Значение [{ "Идентификатор": 1,» CategoryName ":" Food "}, {" Id ": 2," CategoryName ":" Автомобиль "}, {" Id ": 3," CategoryName ":" Дом "}, {" Id ": 4," CategoryName» : "Работа"}] типа org.json.JSONArray не могут быть преобразованы в JSONObject 09-02 07: 06: 47.029: WARN/System.err (568): в org.json.JSON.typeMismatch (JSON.java:107)

Вот-объектов 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; 
} 

} 

Чтобы получить доступ к веб-сервиса, я использую класс от: http://lukencode.com/2010/04/27/calling-web-services-in-android-using-httpclient/

Пожалуйста, помогите мне, как я застрял 2 дня и не могу понять, как продолжить. Я нашел здесь несколько предметов, но до сих пор не нашел пути. Большое спасибо.

ответ

0

Объект верхнего уровня в вашей строке JSON является JSONArray не JSONObject, в то время как вы пытаетесь разобрать его как объект. Создайте массив из строки и используйте это.

JSONArray array = new JSONArray(response); 
+0

Прошу прощения, я настоящий новичок в этом мире. Я не могу приспособить свой код к моим потребностям. JSONArray array = null; Строковый отклик = client.getResponse(); try { array = new JSONArray (response); } catch (JSONException e1) e1.printStackTrace(); } j = новый JSONObject (массив); ?? Мне это нужно больше? cats = gson.fromJson (j.toString(), TrackCategories.class); Как это изменилось? Он выталкивает ошибку на новый JSONObject Большое спасибо за вашу поддержку. – Alin

+0

хорошо, что я не имею опыта с библиотекой gson. Вероятно, попробуйте добавить кривые скобки - {ваша оригинальная строка json} - к вашей json-строке, чтобы стать объектом. Затем используйте свой исходный код. –