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) {
}
});
}
}
}
我正在尝试使用 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) {
}
});
}
} }