Android arraylist因迭代

时间:2016-01-18 02:19:42

标签: java android list arraylist iterator

我一直在努力制作一款基于回合制的多人游戏应用程序,到目前为止,情况一直很顺利:我的应用程序可以与本地服务器通信,并从中检索信息。现在,当我尝试将我收到的信息放入arraylist时,我没有收到任何错误,但是arraylist保持为空,这会导致我的应用程序在调用myArrayList.get(i)时崩溃。 以下是设置数组的代码:
我相信问题正在设置下面的阵列

//The "i" below is the iterator used for the index
        for (int i = 1; i < getSharedPreferences("INFO", MODE_PRIVATE).getInt("numberOfGames", 0) + 1; i++) {
            try {
                SharedPreferences s = getSharedPreferences("INFO", MODE_PRIVATE);
                SharedPreferences.Editor e = s.edit();
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("gameid", s.getString("gameID" + i, null)));
                Log.d("request!", "starting");
                JSONObject json = jsonParser.makeHttpRequest(
                        REFRESH_URL, "POST", params);
                success = json.getInt("success");
                Log.i("LOGI", "Success: " + success);
                if (success == 1) {
                    Log.i("LOGI", "**********GAME #" + s.getString("gameID" + i, null) + "**********");
                    Log.i("LOGI", "PLAYER1: " + json.getString("player1"));
                    Log.i("LOGI", "PLAYER2: " + json.getString("player2"));
                    Log.i("LOGI", "Score1: " + json.getString("score1"));
                    Log.i("LOGI", "Score2: " + json.getString("score2"));
                    Log.i("LOGI", "Turn: " + json.getString("turn"));
                    Log.i("LOGI", "Game Chosen: " + json.getString("gameChosen"));

                    //EVERYING BELOW IS THE PROBLEM
                    player1.add(i, json.getString("player1"));
                    player2.add(i, json.getString("player2"));
                    score1.add(i, Integer.parseInt(json.getString("score1")));
                    score2.add(i, Integer.parseInt(json.getString("score2")));
                    turn.add(i, Integer.parseInt(json.getString("turn")));
                    gameChosen.add(i, Integer.parseInt(json.getString("gameChosen")));
                }

以下是获取数组的代码

private void drawCurrentGames(Canvas canvas){
    String player1;
    String player2;
    String opponent;
    int score1;
    int score2;
    Log.i("LOGI", "WOERKIGN");
    for(int i=0; i<Main.games; i++){
        //The app crashes here
        player1 = Main.player1.get(i);
        player2 = Main.player2.get(i);
        score1 = Main.score1.get(i);
        score2 = Main.score2.get(i);
    }
}

当迭代器不用于设置或获取arraylist时,一切都很好,但是当应用程序崩溃时

1 个答案:

答案 0 :(得分:1)

将项添加到数组的迭代器从1开始。当您调用arraylist的add(int, Object)方法时,添加的对象将添加到第一个参数的索引处。

因此,要添加的第一个项目是在索引1处添加的。当您从该数组列表中读取时,您从0开始。索引0处没有任何内容,这就是您的应用程序崩溃的原因。