我怎么知道Eclipse,Android SDK中的异常是什么?

时间:2011-10-10 21:33:27

标签: java android eclipse exception stack-trace

到目前为止最大的烦恼是,如果有例外情况,我无法看到发生了什么。在Visual Studio中,如果发生异常,即使它发生在底层库的某个地方,我的代码的最后一行也会突出显示为黄色,我可以看到异常是什么。

我知道我遗漏了一些基本的东西,但Eclipse只是向我显示了“未找到源”消息,我有一堆堆栈跟踪,其中包含一堆无用的函数,因为它们都不是我的,但主要的是我只是无法找到有关抛出异常的任何信息,它让我感到沮丧。

LogCat面板中没有关于异常的内容,控制台窗口中没有关于异常的内容,但我知道它应该在某处,请帮我找到它。

3 个答案:

答案 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线程做错了,但我不知道是什么。我根本不使用多个线程。