【问题标题】:Android arraylist crashes with iterationAndroid arraylist 因迭代而崩溃
【发布时间】:2016-04-23 03:04:05
【问题描述】:

我一直在尝试制作一个多人回合制应用程序,到目前为止一切进展顺利:我的应用程序可以与本地服务器通信,并从中检索信息。现在,当我尝试将收到的信息放入 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时,一切都很好,但是当它是应用程序崩溃时

【问题讨论】:

  • 你是否在 UI 线程中发送了 http 请求?
  • @sanemars 它在一个异步任务中

标签: java android list arraylist iterator


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2016-02-07
    • 2013-11-15
    • 1970-01-01
    • 2020-01-25
    • 2021-04-23
    相关资源
    最近更新 更多