2012-03-28 3 views
0

я уже смотрел на подобный вопрос здесь: null pointer exception-parsing json with gson androidнулевой указатель исключение разбора JSON с gson андроид 2,2

Я получаю ту же ошибку, но мои объекты немного отличаются, и он не только на Android 2.2, но не андроид 2.3 , Кажется, что сом-гейлинг похож на известную ошибку 2.2, зафиксированную в 2.3. Но может быть, обходной путь?

Так вот код:

NewsContainer newsContainer = gson.fromJson(response, NewsContainer.class); 

JSON ответ:

{"newsList": 
{"group": 
    {"news": 
     {"news": 
      {"ranking":"1","id":"NEWS-33713","type":"Fnac","title":"LAURENT GERARD, GERARD COMME ...","subtitle":"THEATRE DES MATHURINS","preview":"http:\/\/www.fnacspectacles.com\/static\/0\/visuel\/grand\/215\/LAURENT-GERARD_2159024664536169906.jpg?1325241781000","details":"LAURENT GERARD, GERARD COMME ...\nDu: 24\/01\/2012 au 30\/06\/2012","address":"36, rue des Mathurins 75008 PARIS","url":"http:\/\/ad.zanox.com\/ppc\/?21135664C184852886&ULP=[[\/place-spectacle\/manifestation\/Seul-en-scene-LAURENT-GERARD--GERARD-COMME-----RARD.htm]]","start_date":"2012-01-24 00:00:00","poi":     {"latitude":"48.8731960","longitude":"2.3257960"} 
      } 
     } 
    } 
} 

}

А вот мои объекты:

public class NewsContainer { 
private NewsList newsList; 

public NewsContainer() { 
    ; 
} 

private static class NewsList { 
    List<NewsGroup> group; 
} 

public List<NewsGroup> getNewsList() { 
    return newsList.group; 
} 

public void setNewsList(List<NewsGroup> newsList) { 
    this.newsList.group = newsList; 
} 

}

public class NewsGroup implements Group{ 
private Long id; 
private String title; 
// @Exclude 
private List<News> news; 

public List<News> getNews() { 
    return news; 
} 

public NewsGroup() { 
} 

public void setNews(List<News> news) { 
    this.news = news; 
} 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

@Override 
public List<? extends Item> getItems() { 
    return news; 
} 

}

намного больше объектов, участвующих, но это было бы слишком долго, чтобы было его здесь. Спросите, нужно ли вам увидеть один из них.

С уважением

ответ

1

В Gson, мы обычно используем список < T>, когда мы имеем дело с JSON массивами. Из вашего ответа JSON я вижу, что нет массивов (только объекты внутри объектов). Если ваш список новостей содержит МНОГИЕ группы, тогда JSON должен быть следующим:

{"newsList": 
    "group" : [{"news": .... }, ... ] 
} 
+0

Спасибо за ваш ответ! Скажите мне, если я ошибаюсь, но похоже, что объект gson ожидает список группы, содержащий список новостей и т. Д., А строка json просто содержит объекты. Поэтому, если я уверен, что никогда не получаю массив, я могу изменить объекты, чтобы они не содержали списки. Если нет, мне нужно попросить разработчика json webservice изменить ответ. Также похоже, что Android 2.3 способен справляться с этим сам. –

+0

Да, точно. строка JSON, которую вы получаете, должна совпадать с вашими частными классами (NewsGroup и NewsList). Обычно вы должны иметь возможность получить четкое описание объекта JSON, чтобы вы могли моделировать эти классы после него. Вы также можете изменить сам ответ JSON, но это зависит от того, используются ли веб-службы в другом месте. – Rorchackh