在Android Studio中运行我的应用时出现错误:
Throwing new exception 'length=55; index=66' with unexpected pending exception: java.lang.ArrayIndexOutOfBoundsException: length=55; index=66 at void cz.alois_seckar.vseadventrura.DialogueActivity.onCreate(android.os.Bundle) (DialogueActivity.java:26)
问题是,错误输出没有说明发生这种情况的特定位置。我只知道在我的后端逻辑类 DemoAppartmentGame 的初始化过程中发生了这种情况。我试图找到一些有问题的内部,但有很多类依赖于另一个(我不是代码的作者)。我无法想到任何事情,这应该是代码中55个 somethings 的数组(有几个"房间"每个都有几个"项目&# 34;在内部,没有描述文本似乎那么长。)
我甚至发现我必须做的事情,克服它(它正在损害内在的逻辑,所以这不是好的解决方案),但我仍然不知道为什么它正在发生,这是我需要弄清楚的。我确切知道的是,代码在作为Java程序运行时有效,但是在我移植到Android之后会出现这个问题。
当app输出没有指定发生错误的位置时,很难猜测,发生了什么。我尝试使用Android Studio调试器,但发现自己甚至无法进入代码。
调试器停在game = DemoApartmentGame.getInstance();
行(DialogueActivity.java
中的第26行),但F7没有任何用处。当我尝试将断点放在.getInstance()
中时,调试器甚至都没有到达它......
我的问题主要是:是否有任何选项可以改善应用程序输出以查看错误的更多详细信息?
如果需要,我准备提供更多详细信息。
答案 0 :(得分:0)
你每次都得到这个例外,那么如果你没有多少选择,那么进行这种捕获的一种分析方法是逐个将数组更改为ArrayList。根据当前情况,很明显你的阵列有非法访问的地方。这种方法将帮助您在挖掘代码的同时以一种建设性的方式来解决问题。
答案 1 :(得分:0)
您可以在异常上放置断点,以便每当抛出任何(或特定)异常时,调试器将停止在将要抛出它的行上。
您可以在“断点”对话框中执行此操作,单击左上角的加号图标并选择Java Exception Breakpoint
,然后键入ArrayIndexOutOfBoundsException。 (我的经验是IntelliJ,但应该与Android Studio相同)。
只要你有图书馆的来源抛出异常,它就会把你带到正确的位置。
答案 2 :(得分:0)
问题解决了:我发现这是Retrolambda的错 - 或者说是我的错。我忽略了这样一个事实:我必须在build.gradle
简单的代码如下:
retrolambda {
defaultMethods true
}
错误消失了,应用程序正在运行。
所以它必须是错误配置的Retrolambda的一些内部内容,因此Android Studio调试工具无法访问......