【问题标题】:ArrayList showing empty even after adding elements即使添加元素后 ArrayList 仍显示为空
【发布时间】:2021-05-27 06:12:38
【问题描述】:

在从我的 API 接收数据并将其填充到 ArrayList 存储的对象中后,我正在填充我的 ArrayList,但是当我记录 ArrayList 的大小时,它显示为空。

这是我的代码:

public class MainActivity extends AppCompatActivity {

private RequestQueue queue;
private static ArrayList<Team> teams;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RecyclerView recyclerView = findViewById(R.id.homeRecyclerView);

    this.teams = new ArrayList<>();

    queue = Volley.newRequestQueue(this);
    TeamNamesAdapter teamNamesAdapter = new TeamNamesAdapter(teams);

    parseJSON();

    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(teamNamesAdapter);

    Log.i("Info",String.valueOf(teams.size()));

}


private void parseJSON(){
    String url = "http://192.168.0.174:8080/team";

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest
            (Request.Method.GET, url, null, response -> {

                try {

                    for(int i=0;i<response.length();i++){
                        JSONObject teamDetails = response.getJSONObject(i);
                        Team team = new Team();
                        team.setId(Long.parseLong(teamDetails.getString("id")));
                        team.setTeamName(teamDetails.getString("teamName"));
                        team.setTotalMatches(Long.parseLong(teamDetails.getString("totalMatches")));
                        team.setTotalWins(Long.parseLong(teamDetails.getString("totalWins")));

                        this.teams.add(team);
                        
                        Log.i("Info","Added team "+team.getTeamName()+" successfully");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }, error -> Log.i("ERROR","Couldn't parse JSON"));

    queue.add(jsonArrayRequest);

}}

我的 API 正在工作,因为我能够记录正在创建但未存储在列表中的每个团队对象。

【问题讨论】:

  • 我不知道 JsonArrayRequest 函数,但是它有可能被异步执行吗?
  • @DorianPavetić 没错,这完全是异步执行的,log team team size 的行将显示为 0。
  • 如果是这种情况,那么您正在打印数组的大小,甚至在它被填充值之前,即使它看起来像是要按照编写代码的顺序执行。您应该在尝试中将打印放在 for 循环之后。

标签: java android arraylist


【解决方案1】:

你可以删除this.teams = new ArrayList&lt;&gt;();并在开头添加initialisaiton,因为它是静态的,private static ArrayList&lt;Team&gt; teams = new ArrayList&lt;&gt;();

【讨论】:

  • 感谢这工作。但即使我的回收站视图越来越多,大小仍然显示为 0。
  • 很高兴它有帮助,Log.i("Info",String.valueOf(teams.size())); 在这里您可以像Log.i("Info",teams.size()); 一样直接打印teams.size。如果它解决了您的问题,请接受回答并投票
猜你喜欢
  • 2016-08-15
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
相关资源
最近更新 更多