2012-03-28 7 views
0

ich bereits auf eine ähnliche Frage hier sah: null pointer exception-parsing json with gson androidNull-Zeiger-Ausnahme-Parsing json mit Gson Android 2.2

Ich bin gleichen Fehler, aber meine Objekte sind etwas anders und es nicht nur auf Android 2.2, aber nicht Android 2.3 . Das Somme-Googeln scheint so zu sein, als wäre es ein bekannter 2.2-Bug, der in 2.3 behoben wurde. Aber vielleicht gibt es einen Workaround?

So, hier ist der Code:

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

die Json Antwort:

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

}

:

{"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"} 
      } 
     } 
    } 
} 

}

Und hier meine Objekte

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

}

Das ist viel mehr Objekte beteiligt, aber es würde zu lange dauern, es hier hatte. Fragen Sie, ob Sie einen von ihnen sehen müssen.

Grüße

Antwort

1

Im Gson, verwenden wir in der Regel Liste < T>, wenn wir mit JSON-Arrays zu tun hat. Aus Ihrer JSON-Antwort sehe ich, dass es keine Arrays (nur Objekte innerhalb von Objekten) gibt. Wenn Ihre Nachrichtenliste viele Gruppen enthält, dann sollte JSON wie folgt aussehen:

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

Vielen Dank für Ihre Antwort! Sagen Sie mir, wenn ich falsch liege, aber es sieht so aus, als ob das Gson-Objekt eine Liste von Gruppen erwartet, die eine Liste von Nachrichten usw. enthalten und die JSON-Zeichenfolge nur Objekte enthält. Wenn ich sicher bin, dass ich nie ein Array bekommen werde, kann ich die Objekte so ändern, dass sie keine Listen enthalten. Wenn nicht, muss ich den json webservice Entwickler bitten, die Antwort zu ändern. Es sieht auch so aus, als ob Android 2.3 damit umgehen könnte. –

+0

Ja, genau. Die JSON-Zeichenfolge, die Sie erhalten, sollte Ihren privaten Klassen (NewsGroup und NewsList) entsprechen. Normalerweise sollten Sie in der Lage sein, eine klare Beschreibung des JSON-Objekts zu erhalten, damit Sie diese Klassen danach modellieren können. Sie können die JSON-Antwort auch selbst ändern, aber das hängt davon ab, ob die Webdienste an anderer Stelle verwendet werden. – Rorchackh