Этот вопрос является продолжением моего более раннего вопроса, который можно найти здесь: Android GSON: парсинг нескольких различных объектов из одного и того же ответа
Я последовал за ответом, опубликованным тами создал 4 отдельных класса для моего ответа JSON.Однако при анализе этого ответа объекты создаются (или я так думаю, поскольку ошибок синтаксического анализа не возникает), но при попытке выяснить данные этих объектов возникают NullPointers.
Мой JSON-ответ выглядит следующим образом:
{
"Home": {
"Icon": [
{
"ScreenID": 533,
"ScreenIndex": 1,
"IconName": "mainIcon_news",
"Title": "News",
"FK_ModuleID": 6,
"FormID": 567,
"ModName": "News",
"MediaType": "",
"New_Icon": 0
},
{
"ScreenID": 528,
"ScreenIndex": 2,
"IconName": "mainIcon_music",
"Title": "Music",
"FK_ModuleID": 3,
"FormID": 562,
"ModName": "Media",
"MediaType": "Music",
"New_Icon": 0
}
],
"Header": [
{
"ModHomeRotationID": 183,
"image_url": "*****/Media/68/1216_5.jpg",
"flg_RotationEnabled": false,
"flg_RotateOnlyOnReturn": true,
"flg_RotationRandomize": false,
"flg_RotationDelayMS": 5000,
"flg_RotationDelayFadeMS": 3000,
"HomeRotationIndex": null
}
],
"Player": [
{
"MediaID": 1219,
"Track_Name": "***",
"song_url": "*****/Media/68/1219.mp3",
"song_remote_url": null,
"FileSize": 4700502
},
{
"MediaID": 1220,
"Track_Name": "**** ",
"song_url": "*****/Media/68/1220.mp3",
"song_remote_url": null,
"FileSize": 4350222
}
]
}
}
Мой код для анализа этого ответа выглядит следующим образом:
package com.mobowski.app.menusections;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.mobowski.app.json.WebService;
import com.mobowski.app.listitems.Item;
import com.google.gson.Gson;
import android.app.Activity;
import android.os.Bundle;
//import android.widget.Toast;
public class TestMain extends Activity {
ArrayList<Item> items = new ArrayList<Item>();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// setContentView(R.layout.mainlinks);
retrieveLinks();
}
public void retrieveLinks() {
// Instantiate the Web Service Class with he URL of the web service not
// that you must pass
WebService webService = new WebService(
"http://editedduetosecurityreasons");
// Pass the parameters
Map<String, String> params = new HashMap<String, String>();
params.put("iAppID", "59");
params.put("iUserID", "1");
params.put("strCulName", "");
// params.put("var", "");
// Get JSON response from server the "" are where the method name would
// normally go if needed example
// webService.webGet("getMoreAllerts", params);
String response = webService.webGet("", params);
System.out.println("Returns: " + response);
try {
Home collection = new Gson().fromJson(response, Home.class);
for (Icon icon : collection.icons) {
System.out.println(icon.title);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public class Home {
public List<Icon> icons;
public Header header;
public Player player[];
public List<Icon> getIcons() {
return icons;
}
public void setIcons(List<Icon> icons) {
this.icons = icons;
}
public Header getHeader() {
return header;
}
public void setHeader(Header header) {
this.header = header;
}
public Player[] getPlayer() {
return player;
}
public void setPlayer(Player[] player) {
this.player = player;
}
public Player getSinglePlayer(int i) {
return player[i];
}
public Icon getSingleIcon(int i) {
return icons.get(i);
}
}
public class Icon {
public int ScreenID;
public int ScreenIndex;
public String IconName;
public String title;
public int FK_ModuleID;
public int FormID;
public String ModName;
public String MediaType;
public int New_Icon;
public int getScreenID() {
return ScreenID;
}
public void setScreenID(int screenID) {
ScreenID = screenID;
}
public int getScreenIndex() {
return ScreenIndex;
}
public void setScreenIndex(int screenIndex) {
ScreenIndex = screenIndex;
}
public String getIconName() {
return IconName;
}
public void setIconName(String iconName) {
IconName = iconName;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getFK_ModuleID() {
return FK_ModuleID;
}
public void setFK_ModuleID(int fK_ModuleID) {
FK_ModuleID = fK_ModuleID;
}
public int getFormID() {
return FormID;
}
public void setFormID(int formID) {
FormID = formID;
}
public String getModName() {
return ModName;
}
public void setModName(String modName) {
ModName = modName;
}
public String getMediaType() {
return MediaType;
}
public void setMediaType(String mediaType) {
MediaType = mediaType;
}
public int getNew_Icon() {
return New_Icon;
}
public void setNew_Icon(int new_Icon) {
New_Icon = new_Icon;
}
}
public class Player {
public int MediaID;
public String Track_Name;
public String song_url;
public String song_remote_url;
public int FileSize;
public int getMediaID() {
return MediaID;
}
public void setMediaID(int mediaID) {
MediaID = mediaID;
}
public String getTrack_Name() {
return Track_Name;
}
public void setTrack_Name(String track_Name) {
Track_Name = track_Name;
}
public String getSong_url() {
return song_url;
}
public void setSong_url(String song_url) {
this.song_url = song_url;
}
public String getSong_remote_url() {
return song_remote_url;
}
public void setSong_remote_url(String song_remote_url) {
this.song_remote_url = song_remote_url;
}
public int getFileSize() {
return FileSize;
}
public void setFileSize(int fileSize) {
FileSize = fileSize;
}
}
public class Header {
public int ModHomeRotationID;
public String image_url;
public boolean flg_RotationEnabled;
public boolean flg_RotateOnlyOnReturn;
public boolean flg_RotationRandomize;
public int flg_RorationDelayMS;
public int flg_RotationDelayFadeMS;
public int HomeRotationIndex;
public int getModHomeRotationID() {
return ModHomeRotationID;
}
public void setModHomeRotationID(int modHomeRotationID) {
ModHomeRotationID = modHomeRotationID;
}
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
public boolean isFlg_RotationEnabled() {
return flg_RotationEnabled;
}
public void setFlg_RotationEnabled(boolean flg_RotationEnabled) {
this.flg_RotationEnabled = flg_RotationEnabled;
}
public boolean isFlg_RotateOnlyOnReturn() {
return flg_RotateOnlyOnReturn;
}
public void setFlg_RotateOnlyOnReturn(boolean flg_RotateOnlyOnReturn) {
this.flg_RotateOnlyOnReturn = flg_RotateOnlyOnReturn;
}
public boolean isFlg_RotationRandomize() {
return flg_RotationRandomize;
}
public void setFlg_RotationRandomize(boolean flg_RotationRandomize) {
this.flg_RotationRandomize = flg_RotationRandomize;
}
public int getFlg_RorationDelayMS() {
return flg_RorationDelayMS;
}
public void setFlg_RorationDelayMS(int flg_RorationDelayMS) {
this.flg_RorationDelayMS = flg_RorationDelayMS;
}
public int getFlg_RotationDelayFadeMS() {
return flg_RotationDelayFadeMS;
}
public void setFlg_RotationDelayFadeMS(int flg_RotationDelayFadeMS) {
this.flg_RotationDelayFadeMS = flg_RotationDelayFadeMS;
}
public int getHomeRotationIndex() {
return HomeRotationIndex;
}
public void setHomeRotationIndex(int homeRotationIndex) {
HomeRotationIndex = homeRotationIndex;
}
}
}
Однако этот код, похоже, не работает.Нулевой указатель возникает, когда вызывается for (Icon icon : collection.icons) {
.NullPointer возникает, когда любой метод используется на любом из элементов, которые должны были быть сделаны фактически, за исключением объекта Home.
Я уверен, что это означает, что я сделал что-то не так, однако я незнаю, что я сделал не так или где.Может ли кто-нибудь дать мне несколько советов?
Заранее спасибо всем, кто готов попробовать. 1018 *
После попытки предположить Венки, кажется, что данные теперь анализируются лучше.Однако я все еще сталкиваюсь с проблемой.При попытке анализа объекта Header LogCat выдает мне следующую ошибку:
com.google.gson.JsonParseException: Expecting object found: [{"ModHomeRotationID":162,"image_url":"***********/1020_5.jpg","flg_RotationEnabled":false,"flg_RotateOnlyOnReturn":true,"flg_RotationRandomize":false,"flg_RotationDelayMS":5000,"flg_RotationDelayFadeMS":3000,"HomeRotationIndex":null}]
Я знаю, это означает, что он ожидал получить объект, но вместо этого получил массив.Тем не менее, мой код таков:
public class Header {
List<Header_info> header;
}
public class Header_info {
public int ModHomeRotationID;
public String image_url;
public boolean flg_RotationEnabled;
public boolean flg_RotateOnlyOnReturn;
public boolean flg_RotationRandomize;
public int flg_RorationDelayMS;
public int flg_RotationDelayFadeMS;
public int HomeRotationIndex;
}
Я использовал тот же метод для объектов Icon, и они, кажется, хорошо разбираются (без ошибок).Любые предложения, почему это не будет работать для объекта заголовка?Похоже, он имеет тот же формат, что и значки.