繁体   English   中英

idsIterator.remove()抛出IllegalStateException

[英]idsIterator.remove() throws IllegalStateException

我正在尝试使用listIterator的remove方法。 但是,我收到一个IllegalStateException

这是我的代码:

private List<Category> findDescendantsOfCurrentCategory() {
    List<Category> categoryList = new ArrayList<>(mCategoryList);

    List<Category> descendantCategories = new ArrayList<>();

    Stack<String> categoriesIds = new Stack<>();
    categoriesIds.push(mCategoryId);

    ListIterator<Category> categoryListIterator = categoryList.listIterator();

    ListIterator<String> idsIterator = categoriesIds.listIterator();

    while (idsIterator.hasNext()) {
        String parentId = idsIterator.next();

        while (categoryListIterator.hasNext()) {
            Category category = categoryListIterator.next();

            if (category.getParentId().equals(parentId)) {
                idsIterator.add(category.getId());

                descendantCategories.add(category);
            }

            categoryListIterator.remove();
        }

        idsIterator.remove();
    }

    return descendantCategories;
}

堆栈跟踪:

03-09 23:11:33.160 25298-25298/com.example.clients.someoneplatform.dev E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.clients.someoneplatform.dev, PID: 25298
              java.lang.IllegalStateException
        at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:67)
        at com.example.clients.someoneplatform.ui.categories.list.ListCategoriesFragment.findDescendantsOfCurrentCategory(ListCategoriesFragment.java:186)
        at com.example.clients.someoneplatform.ui.categories.list.ListCategoriesFragment.startAddEditCategoryForModification(ListCategoriesFragment.java:154)
        at com.example.clients.someoneplatform.ui.categories.list.ListCategoriesFragment.access$200(ListCategoriesFragment.java:39)
        at com.example.clients.someoneplatform.ui.categories.list.ListCategoriesFragment$1.onCategoryModifyButtonClicked(ListCategoriesFragment.java:124)
        at com.example.clients.someoneplatform.ui.categories.list.ListCategoriesAdapter$ViewHolder.onModifyButtonClicked(ListCategoriesAdapter.java:134)
        at com.example.clients.someoneplatform.ui.categories.list.ListCategoriesAdapter$ViewHolder_ViewBinding$2.doClick(ListCategoriesAdapter$ViewHolder_ViewBinding.java:47)
        at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
        at android.view.View.performClick(View.java:5201)
        at android.view.View$PerformClick.run(View.java:21209)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5525)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

ListIterator上的文档( https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html#remove() )谈到了remove方法:“只有在add( E)在最后一次调用下一个或上一个之后没有被调用。”

因此,您基本上必须在调用remove之前重写不使用add函数的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM