length=0; index=-1 at java.util.ArrayList.get(ArrayList.java:439) at io.legado.a...
🚨 错误信息
java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
at java.util.ArrayList.get(ArrayList.java:439)
at io.legado.app.ui.book.read.page.entities.TextChapter.getReadLength(SourceFile:17)
at li.v0.A(SourceFile:5)
at mj.c2.onStopTrackingTouch(SourceFile:51)
at android.widget.SeekBar.onStopTrackingTouch(SeekBar.java:181)
at android.widget.AbsSeekBar.onTouchEvent(AbsSeekBar.java:931)
at android.view.View.dispatchTouchEvent(View.java:13699)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3249)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2938)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:741)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:2013)
at android.app.Activity.dispatchTouchEvent(Activity.java:4180)
at dh.a.dispatchTouchEvent(SourceFile:6)
at j.a0.dispatchTouchEvent(SourceFile:3)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:687)
at android.view.View.dispatchPointerEvent(View.java:13962)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6420)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6215)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5604)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5657)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5623)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5781)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5631)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5838)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5604)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5657)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5623)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5631)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5604)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8701)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8621)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8574)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8959)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:239)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:363)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:8668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
🤖 AI解决方案
代码报错分析报告
根本原因:尝试访问空ArrayList中的-1索引位置在
代码试图从一个空的ArrayList(length=0)中获取索引为-1的元素
这通常发生在滑动条(SeekBar)拖动操作过程中,当章节列表为空时进行索引计算
防御性编程:在访问集合元素前,始终检查集合是否为空和索引是否有效
边界检查工具:使用Android Studio的静态代码分析工具,开启
错误翻译
原文:java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
译文:数组索引越界异常:数组长度为0;索引为-1
原因分析
根本原因:尝试访问空ArrayList中的-1索引位置
具体分析:
io.legado.app.ui.book.read.page.entities.TextChapter.getReadLength()方法中(第17行)解决方案
java
// 修复方法:在访问ArrayList前添加空检查和索引验证
public int getReadLength() {
if (chapterList == null || chapterList.isEmpty()) {
return 0; // 返回默认值或抛出更友好的异常
}
int index = calculateCurrentIndex(); // 获取当前索引的方法
if (index < 0 || index >= chapterList.size()) {
Log.w("TextChapter", "Invalid chapter index: " + index);
return 0; // 处理无效索引情况
}
return chapterList.get(index).getLength();
}
️ 预防措施
@Nullable和@NonNull注解来预防空指针和越界问题---
如需进一步分析具体的业务逻辑实现,请提供相关的代码片段。