将解析的 json 映射到 java 对象不起作用-LibGdx



我第一次在我的 LibGDX 项目中使用 json 解析,但我无法正确获得解析的结果。

在这里,我想用属性管理障碍;名称,方向,间隙和速度。

我有一个这样的 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));

解析的值在控制台中正确显示。

我在这里犯了什么错误?

你的常量似乎不是常量,因为它们可以改变。我发现这很奇怪,另一方面,代码非常令人困惑。我不完全确定你想实现什么。

但是索引错误可能是由增加常量引起的(提示,不是常量,是吗?Constants.OBS_COUNT++;在 readJson 方法中。给定您的 json 文件,OBS_COUNT最终可能是 5,因此 Constants.obsArray.get(Constants.OBS_COUNT) 失败,因为您的数组只有索引位置 0 到 4。

最新更新