java.lang.IndexOutOfBoundsException:索引 500 无效,在 for 循环内使用改造回调时大小为 1

java.lang.IndexOutOfBoundsException: Invalid index 500, size is 1 while using retrofit callback inside for loop

我正在尝试使用 retrofit 从 api 获取数据并使用 ArrayList 存储数据,ArrayList 的大小为 500正在从 api 获取数据。在尝试记录来自 ArrayList 的项目时,我的应用程序崩溃了,我得到了

error java.lang.IndexOutOfBoundsException: Invalid index 500, size is 1

我认为问题出在变量 int i 上。请指正我错误的地方并指导我如何解决这个问题。

private int i = 0;
private void get() {
    // size of newList is 500
    for ( i = 0; i < newList.size(); i++) { 
        apiService.getNewStories(newStoryIdList.get(i), new Callback<Story>() {
            @Override
            public void success(Story story, Response response) {
                listStory.add(story);
                Log.d("newListItems" ,+listStory.get(i).toString()); // getting error java.lang.IndexOutOfBoundsException: Invalid index 500, size is 1
            }

            @Override
            public void failure(RetrofitError error) {
            }
        });
    }
}

newList 的大小可能为 500,但是 newStoryIdList 呢?

我认为问题出在这一行:
apiService.getNewStories(newStoryIdList.get(i), new Callback<Story>() {

没有 apiService.getNewStories 的定义我可以假设你需要使用 apiService.getNewStories(newStoryIdList, new Callback<Story>() { 来代替?

我想问题是,当回调到达时,你的变量 i 的值为 500,因为你的 for-loop 会在本地增加它

之后回调会回来,在listStory上加1story i还是500你在一个list上调用listStory.get(i).toString(),有当时只有 1 个值

编辑:解决方案: 删除调试输出,或写入:

Log.d("newListItems" ,story.toString());

通过检查 newList 的大小解决了我的问题。如果 newList 的大小大于 0,则 for 循环将执行,否则不执行。

private int i = 0;
private void get() {
    if(newList.size() > 0) {
       for ( i = 0; i < newList.size(); i++) { 
          apiService.getNewStories(newStoryIdList.get(i), new  Callback<Story>() {
                @Override
                public void success(Story story, Response response) {
                  listStory.add(story);
                  Log.d("newListItems" ,+listStory.get(i).toString()); 
        }

        @Override
        public void failure(RetrofitError error) {
        }
    });
}

} }