首页 > 解决方案 > java.lang.IndexOutOfBoundsException:索引:2,大小:0

问题描述

当我从视图中绘制画布时,偶尔会发生此错误

  val view: View = this.activity.getWindow().getDecorView().getRootView()

        val bitmap = Bitmap.createBitmap(
            view.width,
            view.height,
            Bitmap.Config.ARGB_8888
        ) // Bitmap()


        val canvas = Canvas(bitmap)
        view.draw(canvas) // trace brings me here

这是日志的其余部分

  java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
        at java.util.ArrayList.get(ArrayList.java:437)
        at android.view.ViewGroup.getAndVerifyPreorderedView(ViewGroup.java:3624)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4110)
        at android.view.View.draw(View.java:20075)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20075)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20075)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20075)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20075)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20210)
        at com.android.internal.policy.DecorView.draw(DecorView.java:790)

标签: javaandroidandroid-layoutkotlin

解决方案


尝试从主线程调用你的函数 - 似乎已经为我修复了它。我认为问题是从主线程迭代视图层次结构,然后一些主线程调用者正在以某种方式修改视图层次结构,有时在迭代的同时。

如果你持有主线程,那么层次结构在你迭代它时不能被修改,所以你不会遇到这个问题。


推荐阅读