2017-07-06 12 views
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をオブジェクトbearにマップしたいと思います。そのために、私はこのようにしました:

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

解析された値がコンソールに正しく表示されています。

私はここで何をしましたか?

答えて

0

あなたの定数は変わる可能性があるため、定数ではないようです。私はそれが奇妙であることを発見しました。そして別のものとして、コードは非常に混乱しています。私はあなたが達成しようとしていることを完全には分かっていません。

しかし、インデックスエラーは、定数をインクリメントすることによって発生する可能性があります(ヒントではなく、定数ですか?)Constants.OBS_COUNT ++; readJsonメソッドで呼び出されます。 jsonファイルを指定すると、OBS_COUNTは5になる可能性があります。したがって、Constants.obsArray.get(Constants.OBS_COUNT)は、配列のインデックス位置が0から​​4までのため失敗します。

関連する問題