К сожалению,МайАпп остановился.Как я могу решить эту проблему

java android debugging kotlin crash


Я разрабатываю приложение,и каждый раз,когда я его запускаю,я получаю сообщение:

К сожалению,МайАпп остановился.

Что я могу сделать,чтобы решить эту проблему?


Об этом вопросе, явно вдохновленном тем, что такое трассировка стека, и как я могу использовать ее для отладки ошибок моего приложения? Есть много вопросов о том, что их приложение не работает, без каких-либо подробностей. Этот вопрос направлен на то, чтобы научить начинающих Android-программистов, как самим пытаться решить свои проблемы, или задать правильные вопросы.




Answer 1 nhaarman


Этот ответ описывает процесс получения трассировки стека. Уже есть трассировка стека? Читайте о трассировке стека в разделе « Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения? »

Проблема

Ваше приложение RuntimeException потому что возникла необработанная исключительная ситуация RuntimeException .
Наиболее распространенным из них является NullPointerException .

Как это решить?

Каждый раз, когда происходит сбой приложения Android (или любого другого приложения Java), Stack trace записывается на консоль (в данном случае logcat). Эта трассировка стека содержит важную информацию для решения вашей проблемы.

Android Studio

Finding the stack trace in Android Studio

В нижней панели окна нажмите кнопку Logcat . Кроме того, вы можете нажатьalt+6, Убедитесь, что на панели « Devices выбран ваш эмулятор или устройство . Далее попробуйте найти трассировку стека, которая показана красным. В logcat может быть много материала, поэтому вам может понадобиться немного прокрутить. Самый простой способ найти трассировку стека - очистить logcat (с помощью корзины справа) и снова запустить приложение.

Я нашел след от стопки,и что теперь?

Ура! Ты на полпути к решению своей проблемы.
Вам нужно только выяснить,что именно привело к краху вашего приложения,проанализировав трассу стека.

Читайте о трассировке стека в разделе « Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения? »

Я все еще не могу решить свою проблему!

Если вы нашли свое Exception и строку, где оно произошло, и все еще не можете понять, как его исправить, не стесняйтесь задавать вопрос по StackOverflow.

Постарайтесь быть как можно более кратким: опубликовать трассировку стека и соответствующий код (например, несколько строк до строки, которая вызвала Exception ).




Answer 2 Vlad Bezden


Вы можете использовать инструмент ADB от Google, чтобы получить Logcat file для анализа проблемы.

adb logcat > logcat.txt

открытый logcat.txt файлы и поиск вашего имени приложения. Должна быть информация о том, почему это не удалось, номер строки, имя класса и т. Д.




Answer 3 Hiren Vaghela


Сначала вы проверяете, в какой точке вашего приложения произошел сбой ( Unfortunately, MyApp has stopped. ). Для этого вы можете использовать Log.e("TAG", "Message"); С помощью этой строки вы можете увидеть журнал вашего приложения в logcat.

После этого вы найдете точку,в которой ваше приложение остановилось это очень легко решить на вашей стороне.




Answer 4 Rahil Ali


Просто проверь ошибку в журнале.

Вы получаете опцию бревенчатого кота в затмении:

окно-> показать вид-> другие-> Android-> Logcat

Журнал-кот содержит ошибку.

Кроме того,вы можете проверить ошибку,запустив приложение в отладочном режиме.Сначала установите после этого точку останова:

щелкните правой кнопкой мыши на проект-> отладка как-> приложение для Android




Answer 5 Ab_


Примечание. Для ответа используется Android Studio 2.2.2.

Примечание 2: я считаю, что ваше устройство успешно подключено.


Первое,что вы делаете,когда ваше приложение выходит из строя,это смотрите в LogCat,в нижней части Android Studio есть панель инструментов со списком меню:

image

Нажмите на "Монитор Android" (тот,который я подчеркнул на изображении выше.^).

Теперь ты получишь что-нибудь вроде этого:

image

Измените « Verbose » на « Error ». Теперь он будет показывать только зарегистрированные ошибки. Не беспокойтесь обо всех этих ошибках (если вы их получили) сейчас.

image

Хорошо. Теперь сделайте то, что вы сделали, чтобы разбить ваше приложение. После сбоя приложения перейдите на страницу logcat. Вы должны найти новый журнал сбоев, который имеет много значений по at:x.x.x : и Caused by: TrumpIsPresidentException например. Перейти к тому, что вызвано Caused by: утверждение в вашем logcat.

image

Рядом с Caused By: , вызванной:, должно быть исключение, которое произошло. В моем случае это RuntimeException , и под ним должна быть строка, содержащая синюю ссылку, например:

image

Если это Caused by: НЕ имеет строки с синим текстом где-то под ним, то найдите другую Caused by: это делает.

Нажмите на эту синюю ссылку . Это должно привести вас туда, где возникла проблема. В моем случае это было связано с этой строкой:

throw new RuntimeException();

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


Однако,допустим,у меня еще одна ошибка:

java.lang.NullPointerException

Я проверил свой лог-кот,нажал на синюю ссылку,которую он мне дал,и она привела меня сюда:

mTextView.setText(myString);

Итак, теперь я хочу отлаживать. Согласно этому вопросу StackOverflow , исключение NullPointerException говорит, что что-то является null .

Итак, давайте выясним, что является нулевым . Есть две возможности. Либо mTextView имеет значение null, либо myString имеет значение null. Чтобы выяснить, перед mTextView.setText(mString) я добавлю эти две строки:

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

Теперь,как и ранее (Мы изменили Вероуз на Ошибку),мы хотим изменить "Error" на "Debug".Так как мы ведем журнал путем отладки.Вот все методы ведения журнала:

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

Итак, поскольку мы использовали Log.d , мы проверяем в Debug. Вот почему мы изменили его на отладку.

Обратите внимание, что Log.d имеет первый параметр, в нашем случае «AppDebug». Нажмите на раскрывающееся меню «Нет фильтров» в правом верхнем углу logcat. Выберите «Редактировать конфигурацию фильтра», дайте имя вашему фильтру, а в «Log Tag» вставьте «App Debug». Нажмите «ОК». Теперь вы должны увидеть две строки в logcat:

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

Итак,теперь мы знаем,что mTextView равен нулю.

Я соблюдаю свой код,теперь я кое-что замечаю.

У меня есть private TextView mTextView объявленный в верхней части моего класса. Но я не определяю это.

В основном,я забыл сделать это в своей onCreate():

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

Так вот почему mTextView имеет значение null, потому что я забыл сообщить своему приложению, что это такое. Поэтому я добавляю эту строку, запускаю свое приложение, и теперь оно не падает.