到目前为止最大的烦恼是,如果有例外情况,我无法看到发生了什么。在Visual Studio中,如果发生异常,即使它发生在底层库的某个地方,我的代码的最后一行也会突出显示为黄色,我可以看到异常是什么。
我知道我遗漏了一些基本的东西,但Eclipse只是向我显示了“未找到源”消息,我有一堆堆栈跟踪,其中包含一堆无用的函数,因为它们都不是我的,但主要的是我只是无法找到有关抛出异常的任何信息,它让我感到沮丧。
LogCat面板中没有关于异常的内容,控制台窗口中没有关于异常的内容,但我知道它应该在某处,请帮我找到它。
答案 0 :(得分:2)
你可以试试这里。它被问到一个相关的问题。
Android Stack Trace - Where is error shown?
我建议您使用LogCat。您可以在
中激活它窗口 - >显示视图 - >其他 - > Android - > logcat中。
如果抛出异常,日志会以红色显示。根据我的经验,真正的问题永远不会出现在异常的开头,它出现在行
之后“引起”
在那里,您将看到代码中的哪一行生成了异常,并且只需双击即可到达那里。
答案 1 :(得分:1)
从上到下遍历堆栈跟踪。很可能,在某些时候你会找到对你的代码的引用,这引发了异常。
通常,如果要编写java程序,了解异常如何工作以及如何读取堆栈跟踪非常重要。
您可以查看本教程: http://www.0xcafefeed.com/2004/06/of-thread-dumps-and-stack-traces/
答案 2 :(得分:0)
我从堆栈跟踪中找到了异常的名称,但这是我所能得到的,仍然不知道导致它的原因和发生的位置。所以这就是我正在做的事情(lstItems是我活动中的ListView控件:
cursor = adapter.fetchAllItems(); //that's a simple database adapter
int a = cursor.getCount();
if (cursor.getCount()!=0)
{
startManagingCursor(cursor);
String[] from = new String[] { adapter.KEY_NAME};
int[] to = new int[] { R.id.listView1 };
for (int i = 0; i < cursor.getCount(); i++)
{
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this,
R.layout.manageItems, cursor, from, to);
lstItems.setAdapter(cursorAdapter); //that's what causing the exception, if I comment this line out, everything's fine, but the list is not updated either.
}
}
因此代码运行,并且当应该显示具有更新的ListView的活动时,调试器将停止并显示以下堆栈跟踪:
Thread [<1> main] (Suspended (exception IllegalStateException))
ListView.layoutChildren() line: 1662
ListView(AbsListView).onLayout(boolean, int, int, int, int) line: 1147
ListView(View).layout(int, int, int, int) line: 7035
LinearLayout.setChildFrame(View, int, int, int, int) line: 1249
LinearLayout.layoutVertical() line: 1125
LinearLayout.onLayout(boolean, int, int, int, int) line: 1042
LinearLayout(View).layout(int, int, int, int) line: 7035
FrameLayout.onLayout(boolean, int, int, int, int) line: 333
FrameLayout(View).layout(int, int, int, int) line: 7035
LinearLayout.setChildFrame(View, int, int, int, int) line: 1249
LinearLayout.layoutVertical() line: 1125
LinearLayout.onLayout(boolean, int, int, int, int) line: 1042
LinearLayout(View).layout(int, int, int, int) line: 7035
PhoneWindow$DecorView(FrameLayout).onLayout(boolean, int, int, int, int) line: 333
PhoneWindow$DecorView(View).layout(int, int, int, int) line: 7035
ViewRoot.performTraversals() line: 1045
ViewRoot.handleMessage(Message) line: 1727
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
我认为发生这种情况是因为我对UI线程做错了,但我不知道是什么。我根本不使用多个线程。