0
第一次我在我的LibGDX項目中使用json解析,並且我無法正確獲取解析的結果。將解析的json映射到Java對象不工作 - LibGdx
在這裏,我想管理的屬性,名稱,方向,差距和速度的障礙。
我有一個JSON文件是這樣的:
"obstacles": [
{"name":"eagle","dir":"up","gap":"100","speed":"0"},
{"name":"bigbird","dir":"up","gap":"200","speed":"0"},
{"name":"elephant","dir":"middle","gap":"300","speed":"0"},
{"name":"tiger","dir":"middle","gap":"400","speed":"0"},
{"name":"bear","dir":"down","gap":"500","speed":"0"},
],
和我讀陣列是這樣的:
public class ReadJson {
static int levelNum = 0;
public ReadJson()
{
}
public static synchronized ArrayList<String> loadLevelJson(int levelno, String name) {
ArrayList obs = new ArrayList<String>();
JsonValue jsonValue = new JsonReader().parse(Gdx.files.internal("levels/level1.json"));
JsonValue objList = jsonValue.get(name);
System.out.println("name:" + objList);
if (name.equals("obstacles")) {
Constants.OBS_COUNT = 0;
for (JsonValue values : objList.iterator()) // iterator() returns a
// list of children
{
obs.add(values.getString("dir"));
Constants.OBS_POSITION[obs.size() - 1] = Integer.parseInt(values.getString("gap"));
Constants.OBS_NAME[obs.size() - 1] = values.getString("name");
Constants.OBS_SPEED[obs.size() - 1] = Integer.parseInt(values.getString("speed"));
Constants.OBS_COUNT++;
}
}
else if (.....)) {
//code
}
return obs;
}
}
陣列在恆定類中定義是這樣的:
public static int OBS_COUNT =20;
public static int[] OBS_POSITION= new int[50];
public static String[] OBS_NAME= new String[50];
public static int[] OBS_SPEED= new int[50];
public static ArrayList<String> obsArray;
我想將解析的json映射到對象熊。爲此,我喜歡這樣:
private ReadJson readJson;
public ObsObjectFactory() {
readJson = new ReadJson();
readJson.loadLevelJson(1,"obstacles");
Constants.obsArray=readJson.loadLevelJson(1,"obstacles");
}
public Bear createBear() {
Bear bear = new Bear();
bear.setName(Constants.OBS_NAME[Constants.OBS_COUNT]);
bear.setDirection(Constants.obsArray.get(Constants.OBS_COUNT));
bear.setSpeed(Constants.OBS_SPEED[Constants.OBS_COUNT]);
bear.setGap(Constants.OBS_POSITION[Constants.OBS_COUNT]);
bear.setPosition(Constants.EAGLE_X,Constants.EAGLE_Y);
bear.setSize(Constants.BEAR_WIDTH,Constants.BEAR_HEIGHT);
return bear;
}
}
但是,當我把這個createBear()方法,並運行此代碼,它被扔在這條線拋出IndexOutOfBoundsException:
bear.setDirection(Constants.obsArray.get(Constants.OBS_COUNT));
解析的值在控制檯中正確顯示。
我在這裏做了什麼錯誤?