0

Writing a small program on Android using Kotlin and sometimes getting ArrayIndexOutOfBoundsException: length=2; index=2

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at java.util.Arrays$ArrayList.get(Arrays.java:3769)
at com.example.MainActivity.Q(:271)
at com.example.MainActivity.K(:44)
at com.example.MainActivity$e.b(:173)
at com.example.MainActivity$e.a(:44)
at androidx.lifecycle.LiveData.b(:131)
at androidx.lifecycle.LiveData.c(:149)
at androidx.lifecycle.LiveData.i(:307)
at b.o.o.i(:50)
at c.a.b$d.f(:185)
at d.e.a.a.a0$c$a.run(:187)
at android.os.Handler.handleCallback(Handler.java:794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6662)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

I can't reproduce the issue, but a team member experienced this bug and shared with me to resolve, so may I know the exact line number causes this exception.

Line number: 173

   viewModel.peers.observe(this, {
        if (it != null) {
            handlePeers(it) // 173
        }
    })

Line number: 271

for (i in peers.indices) if (peers[i] != curPeers.getOrNull(i)) when (val peer = peers[i]) {
            is LocalPeer -> {
                peer.getVideoTracks()["camera"]?.addRenderer(viewRenderers[i]) // 271
                peerViews[i].setMirror(true)
            }
            is RemotePeer -> {
                peer.getVideoTracks()["camera"]?.addRenderer(viewRenderers[i])
                peerViews[i].setMirror(false)
            }
            else -> {

            }
        }

Line number: 307

        for (i in peerViews.indices) {
            if (i < peerViews.size) { // peers
                peerViews[i].visibility = VISIBLE
            } else {
                peerViews[i].visibility = GONE
            }
        } // 307

Line number: 149

        if (it != null) {
            binding.mainView.apply {
                init(null)
                setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
                setEnableHardwareScaler(false)
            }

            try {
                initSubView(it, binding.subView1)
                initSubView(it, binding.subView2)
            } catch (e: Exception) {

            }
           // 149
        }
Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197

0 Answers0