Как узнать, что является исключением в Eclipse, Android SDK? - PullRequest
2 голосов
/ 11 октября 2011

Самое большое раздражение на данный момент в том, что я просто не вижу, что, черт возьми, произошло, если есть исключение.В Visual Studio, если возникает исключение, даже если оно произошло где-то в базовых библиотеках, последняя исполняемая строка моего кода подсвечивается желтым, и я вижу, что это за исключение.

Я знаю, что мне не хватаетчто-то простое, но Eclipse просто показывает мне сообщение «Source Not Found», у меня есть трассировка стека с кучей функций, которые бесполезны, потому что ни одна из них не моя, но главное, что я просто не могу найти какую-либоинформация о генерируемом исключении, и это чертовски расстраивает меня.

Панель LogCat не имеет ничего об исключении, в окне консоли нет ничего об исключении, но я знаю, что это должно бытьгде-нибудь, пожалуйста, помогите мне найти его.

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

Вы можете попробовать здесь.Задан связанный вопрос.

Отслеживание стека Android - где отображается ошибка?

Я рекомендую использовать LogCat. Вы активируете его в

Окно -> Показать представление -> Другое -> Android -> LogCat.

Если выброшено исключение, журнал показывает его красным.По моему опыту, настоящая проблема никогда не появляется в начале исключения, она появляется после строки

«Причины»

Там вы увидите, в какой строке в вашем коде исключение былосгенерирован и сможет попасть туда, просто дважды щелкнув по нему.

1 голос
/ 11 октября 2011

пройти трассировку стека сверху вниз.весьма вероятно, что в какой-то момент вы найдете ссылку на ваш код, который вызвал исключение.

обычно, если вы собираетесь программировать на Java, очень важно понимать, как работают исключения и как читать стекследы.

вы можете проверить этот учебник: http://www.0xcafefeed.com/2004/06/of-thread-dumps-and-stack-traces/

0 голосов
/ 11 октября 2011

Я узнал имя исключения из трассировки стека, но это все, что я смог получить, до сих пор не зная, что его вызывает и где это происходит. Итак, вот что я делаю (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]  

Я подумал, что это происходит, потому что я делаю что-то не так с потоком пользовательского интерфейса, но я понятия не имею, что. Я вообще не использую несколько потоков.

...