Try catch исключает всегда возвращает null

У меня проблема с Android. Я разрабатываю на устройстве и имею проблему с улавливающими исключениями. Я запускаю некоторый код в AsyncTask и, наконец, упростил его:

try
{
    if (true)
        throw new Exception("ERROR"); 
}      
catch (Exception e)
{    
    Log.e("e", "exception", e);
}

Моя проблема в том, что переменная 'e' всегда равна null. Не уверен, что происходит на самом деле. Что еще иногда работает, но я не могу сказать, когда. Я просто встаю с компьютера на несколько минут, вернусь и бум, это работает. Выполнение кодирования несколько минут, и снова это null... Был один вопрос о SO около года назад, но никто не знал ответ. Возможно, на этот раз у кого-то появится какая-то идея.

Null exception

Я думаю, что это как-то связано с AsyncTask как за пределами этого, у меня есть исключение, зацепившееся правильно... до сих пор не знаю, почему:( Я обнаружил, что это происходит только при подключении debbuger. Когда я вынимаю кабель от устройства, которое он на самом деле ловит, а исключение больше не пусто...

Ответы

Ответ 1

Невозможно иметь e с нулевым значением в этой точке. Если вы отлаживаете свое приложение с помощью Eclipse, оно отображает значение e.toString() в этой точке, а e.toString() возвращает null.

Попробуйте выполнить другой тест, используя этот код:

try {
    if (true) {
        throw new Exception("ERROR");
    } 
}      
catch (Exception e) {
    if (e == null) {
        Log.e("e", "e is really null!!!");
    }
    else {
        Log.e("e", "e is not null, toString is " + e + " and message is " + e.getMessage());
    }
}

Ответ 2

Я знаю, что это старый вопрос, но это произошло и со мной, и похоже, проблема связана с самим отладчиком!
Когда я запускаю приложение из eclipse (ctrl + F11), он получает правильное исключение (e != null).

Ответ 3

У меня была такая же проблема... Я обнаружил, что это был отладчик, как говорили другие люди. Так что я сделал, чтобы отлаживать - просто поставить точку останова на первую строку блока catch, а не на блок catch. Казалось, работает на меня!

Ответ 4

У меня была такая же странная проблема внутри AsyncTask, при отладке на реальном устройстве (Galaxy Tab 2). (И да, я получил "e is really null!!!" выполнение теста, предложенного @italo)

Для меня проблема таинственно исчезла после отсоединения USB-разъема устройства Android и последующего подключения к нему (и затем снова запустить мое приложение).

Другое предложение, очистка и восстановление проекта, как объяснил здесь, не решило его для меня (но, возможно, для кого-то еще).