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



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




к сожалению, приложение остановилось.




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





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

795   16  

16 ответов:

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

Проблема

ваша заявка ушла, потому что непойманного RuntimeException была брошена.
Наиболее распространенным из них является NullPointerException.

как ее решить?

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

Android Studio

Finding the stack trace in Android Studio

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

я нашел трассировку стека, и что теперь?

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

читать на трассировки стека в "что такое трассировка стека, и как я могу использовать это для отладки мои ошибки приложения?"

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

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

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

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

adb logcat > logcat.txt

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

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

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

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

вы получаете опцию log cat из eclipse:

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

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

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

щелкните правой кнопкой мыши на project - > debug as - >Android application

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

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


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

image

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

, вы получите что-то вроде этого:

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

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

mTextView.setText(myString);

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

Итак, давайте выясним что такое 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);

теперь, как и ранее (мы изменили Verose на Error), мы хотим изменить "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. Выберите " Изменить Фильтр Конфигурация" введите название для фильтра, а в тег "отчет" поставить "приложение отладки". нажимать OK." Теперь вы должны увидеть две строки в 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, потому что Я забыл сказать своему приложению, что это такое. Поэтому я добавляю эту строку, запускаю свое приложение,и теперь приложение не падает.


это всплывающее окно отображается только тогда, когда вы получаете фатальное исключение в коде, которое останавливает выполнение приложения. Это может быть любое исключение NullPointerException, OutOfMemoryException и т. д.

лучший способ проверить это через Logcat, если вы все еще разрабатываете приложение в Android studio, которое является быстрым способом чтения трассировки стека и проверки причины приложения.

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

Проверьте Logcat сообщение и увидеть ваш . Там должно быть что-то не хватает, как определение Activity, разрешение пользователя ' и др.

вы можете использовать любой из этих инструментов:

  1. adb logcat

  2. adb logcat > журналы.txt (вы можете использовать редакторы для открытия и поиска ошибок.)

  3. чтение logcat в Eclipse (если он не виден в Eclipse, откройте окно->Показать панель->прочие->Андроид->чтение logcat)

  4. Android Debug Monitor или Android Device Monitor(введите команду монитор или открыть через UI)

enter image description here

  1. Android Studio

Я предлагаю использовать Android Debug Monitor, это хорошо. Потому что eclipse зависает, когда слишком много журналов есть, и через фильтр adb logcat и все сложно.

вы должны проверить Stack trace

как это сделать?

на вашей IDE проверьте форму Windows LOGCAT

Если вы не видите окна logcat, перейдите по этому пути и откройте его

window->show view->others->Android->Logcat

Если вы используете Google-Api, перейдите по этому пути

adb logcat > logcat.txt

позвольте мне поделиться базовым анализом Logcat для того, когда вы встречаете силу закрыть (когда приложение перестает работать).

DOCS

основной инструмент от Android для сбора / анализа журналов является logcat.

здесь это страница Android о logcat

если вы используете Android Studio, вы также можете проверить это ссылке.

захват

в принципе, вы можете вручную захват logcat с помощью следующей команды (или просто проверьте окно AndroidMonitor в AndroidStudio):

adb logcat

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

adb logcat -v time

вы можете перенаправить вывод в файл и анализировать его в текстовом редакторе.

анализ

если вы приложение рушится, вы получите что-то вроде:

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

эта часть журнала показывает вам много информации:

  • когда проблема случилась: 07-09 08:29:13.475

важно проверить, когда проблема произошла... Вы можете найти несколько ошибок в журнале... вы должны быть уверены, что вы проверяете правильные сообщения:)

  • какое приложение разбилось:com.example.khan.abc

таким образом, вы знаете, какое приложение разбилось (to убедитесь, что вы проверяете журналы о своем сообщении)

  • ошибки: java.lang.NullPointerException

ошибка исключения нулевого указателя

  • подробная информация об ошибке: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

вы пытались вызвать метод onBackPressed() С

в приведенном ниже методе showToast () вы должны передать другой параметр для контекста или контекста приложения, сделав это, вы можете попробовать его.

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}

использовать LogCat и попытаться найти то, что вызывает приложение к краху.

чтобы увидеть Logcat, если вы используете Android Studio нажмите клавишу ALT + 6 или

Если вы используете затмение затем Окно - > Открыть Перспективу - > Другое-LogCat

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

Если ваше приложение по какой-то причине падает без трассировки стека. Попробуйте отладить его от первой строки, и идти строка за строкой до аварии. Тогда у вас будет ответ, какая линия вызывает у вас затруднений. Proably вы можете затем обернуть его в блок try catch и распечатать вывод ошибок.

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

в этом случае вам нужно убедиться, что ваш манифест Android настроен правильно (включая любое слияние манифеста, происходящее из библиотеки, и любое действие, которое будет исходить из библиотеки), и обратите особое внимание на первое действие, отображаемое в вашем приложении в ваших файлах манифеста.

сбой во время разработки

попробовать logview-0.20 чтобы получить журналы и анализировать их во время разработки.
Обязательно отметьте ./logview и ./lib/logview.jar как исполняемый файл при запуске в Linux.

Если вам это не нравится, есть много альтернатив desktop log viewers для Android.

авария в дикой природе

интеграция в режиме реального времени инструмент отчетности аварии, такие как Приложений Опорному Пункту для того, чтобы получить стеков необработанных исключений, которые произошли на устройствах пользователей.

читать как выпустить багги приложение (и жить, чтобы рассказать историю) чтобы узнать больше об обработке ошибок в поле.

люди делают ошибки, и поэтому кодирования.

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

убедитесь, что вы создаете новый activity, всегда объявляйте activity на .

если вы добавляете разрешение, объявите его в AndroidMainifest файл, а также.

Comments

    Ничего не найдено.