测试Android应用的人向我们提交了一个堆栈跟踪,如下所示:
Thread [<21> Thread-31] (Suspended (exception SQLiteException))
FooClass.bar(Foo2Class) line: 198
它指向的代码行与SQLite无关(它不是Android类,它是我的代码)。如果你想知道,它指向的代码行如下所示:
if (s_arrayList.contains(foo2))
所以我能想到的唯一例外是NullPointer ......绝对不是SQLite异常。
我的主要问题是:“暂停(例外X)”的真正含义是什么?如果异常发生在另一个线程上,为什么Android会报告此堆栈跟踪?
更新
我认为这个问题与Eclipse有关,它在检测到异常时挂起了该线程。这仍然让我无法回答这个问题,这就是为什么Eclipse在这个地方怀疑这个问题。我找到了一个相关的问题,它讨论了Eclipse的这个怪癖。你可以在这里阅读更多相关信息:
Eclipse Android Debugger - Where in my code did I cause the exception?
答案 0 :(得分:1)
我可以想象更多的案例。为了追踪它,更多代码会有所帮助。但是,剩下的时间很少
检查堆栈跟踪是否真的适合您的代码版本。
检查s_arraylist的类型。它可能是一些在sqllite上进行后期绑定的特殊代码。但是,我认为这不太可能,但最好验证
检查foo2的类型。可能是它的hashcode或equals方法是直接或间接使用SqlLite。这是我的最爱。
答案 1 :(得分:1)
当你的线程抛出一个暂停 - 异常(就像在你的堆栈跟踪中一样)时,并不意味着你有一个空指针,这意味着来自其他线程的某个调用了Thread.suspend()。