arraylist似乎是空的一面功能

问题描述:

嗨,我有一个数组列表,它是在类的开始定义的,我也尝试在里面放置对象,以便我可以将它用于自定义arrayAdapter的listview,但是当我想使用它似乎是空的响应外听众我测试了两个Toast第一个运行没有问题第二个抛出IndexOutOfBoundsException这里是我的代码我已经把这些两个Toast旁边的评论他们在getUserGamesInfo函数(混乱的混乱已经发生的代码时,我粘贴在这里它是发生):arraylist似乎是空的一面功能

public class account_games_info extends Fragment { 

HashMap<String, String> info = new HashMap<>(); 

String Playerscores, Rivalscore; 
String[] array = null; 
ListView listView; 
ArrayList<gameHistory_object> scoreList=new ArrayList<gameHistory_object>;//************* 
gameHistory_object gameHistory_object; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    get_user_games_ids();//a functio that calls getUserGamesInfo but i didnt bring it here 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View games_info = inflater.inflate(R.layout.fragment_account_games_info, container, false); 
    listView = (ListView) games_info.findViewById(R.id.listView); 

    return games_info; 
} 

private void getUserGamesInfo(String gameID) { 

    final String MY_PREFS_NAME = "username and password"; 
    SharedPreferences prefs = getActivity().getSharedPreferences(MY_PREFS_NAME, 
      MODE_PRIVATE); 
    final String id = prefs.getString("userID", null); 

    info.put("action", "sendGameInformation"); 
    info.put("userID", id); 
    info.put("gameID", gameID); 


    JSONObject jsonObject = new JSONObject(info); 
    final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, 
      url, jsonObject, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 

       gameHistory_object = new gameHistory_object(); 
       if (id.equals(response.getString("playerOneID"))) { 

        Playerscores = response.getString("playerOneTotalScore"); 
        Rivalscore = response.getString("playerTwoTotalScore"); 

        gameHistory_object.setRivalUsername(response.getString("playerTwoUsername")); 
        gameHistory_object.setPlayerScore(Playerscores); 
        gameHistory_object.setRivalScore(Rivalscore); 

       } else { 

        Playerscores = response.getString("playerTwoTotalScore"); 
        Rivalscore = response.getString("playerTwoTotalScore"); 

        gameHistory_object.setRivalUsername(response.getString("playerOneUsername")); 
        gameHistory_object.setPlayerScore(Playerscores); 
        gameHistory_object.setRivalScore(Rivalscore); 

       } 
        scoreList.add(gameHistory_object); 
       //first toast which runs with no problem  

       Toast.makeText(getActivity(),"inside $$$"+scoreList.get(0).getRivalUsername(),Toast.LENGTH_SHORT).show(); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      if (Playerscores.equals("")) { 
       playerScore_view.setText(""); 
      } else { 
       playerScore_view.setText(Playerscores); 
       rivalScore_view.setText(Rivalscore); 
      } 

     } 

    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }); 

    //second toast with outofboundexecption 

    Toast.makeText(getActivity(),"outside 
     $$$"+scoreList.get(0).getRivalUsername(),Toast.LENGTH_SHORT).show(); 

    AppController.getInstance().addToRequestQueue(jsonObjectRequest); 

}

+0

请阅读:[如何创建**最小**,完整和可验证示例](https://*.com/help/mcve) – Andreas

  1. 你永远不会初始化scoreList

    ArrayList<gameHistory_object> scoreList; 
    

    应该

    ArrayList<gameHistory_object> scoreList = new ArrayList(); 
    
  2. 您访问的第0项的它被放在那里之前是。您开始的JsonObjectRequest异步。您的代码将启动异步请求,然后继续到您尝试烘烤的部分,但请求尚未结束(onResponse部分),因此您的列表为空。

呦你的arraylist没有初始化在你的代码中的任何地方,因此IndexOutOfBoundsException。 在你的变量声明这样做:

ArrayList<gameHistory_object> scoreList = new ArrayList <>();