К сожалению приложение остановилось. Как я могу решить эту проблему?
Я разрабатываю приложение, и каждый раз, когда я запускаю его, я получаю сообщение:
к сожалению, приложение остановилось.
Что я могу сделать, чтобы решить эту проблему?
об этом вопросе-очевидно, вдохновленный тем, что такое трассировка стека, и как я могу использовать его для отладки ошибок приложения? есть много вопросов о том, что их приложение разбился, без каких-либо дополнительных подробностей. Этот вопрос призван проинструктировать новичка Android программисты о том, как попытаться исправить свои проблемы сами, или задать правильные вопросы.
16 ответов:
этот ответ описывает процесс получения трассировки стека. Уже есть трассировка стека? Читайте на трассировки стека в "что такое трассировка стека, и как я могу использовать это для отладки мои ошибки приложения?"
Проблема
ваша заявка ушла, потому что непойманного
RuntimeExceptionбыла брошена.
Наиболее распространенным из них являетсяNullPointerException.как ее решить?
каждый раз, когда Сбой приложения Android (или любого приложения Java, если на то пошло), a
Stack traceзаписывается в консоль (в данном случае logcat). Это трассировка стека содержит важную информацию для решения вашей проблемы.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 есть панель инструментов со списком меню:
нажать на "Android Monitor" (тот, который я подчеркнул на изображении выше. ^)
, вы получите что-то вроде этого:меняем "
Verbose" на "Error" теперь он будет показывать только зарегистрированные ошибки. Не беспокойтесь обо всех этих ошибках (если они у вас есть) сейчас.ОК. Теперь сделайте то, что вы сделали, чтобы разбить приложение. После аварийного завершения приложения, перейдите в ваши logcat. Вы должны найти новый сбой журнал, который имеет много
at:x.x.xиCaused by: TrumpIsPresidentExceptionнапример. Иди к этомуCaused by:заявление в ваши logcat.рядом с это
Caused By:, должно быть исключение, которое произошло. В моем случае этоRuntimeExceptionи под там должна быть строка, которая содержит ссылку, например:если это
Caused by:Не имеет строки с синим текстом где-то под ним, а затем искать другойCaused by:так и есть.нажать на эту синюю ссылку. Это должно привести вас к тому, где возникла проблема. В моем случае, это было связано с этой строкой:
throw new RuntimeException();так, теперь я знаю, почему это сбой. Это потому, что я сам бросаю исключение. это была очевидная ошибка.
однако, допустим, у меня есть другой ошибка:
java.lang.NullPointerExceptionя проверил свой logcat, я нажал на синюю ссылку, которую он мне дал, и она привела меня сюда:
mTextView.setText(myString);Итак, теперь я хочу отладить. Согласно этот вопрос StackOverflow, исключение NullPointerException говорит, что что-то
null.Итак, давайте выясним что такое null. Есть две возможности. Либо
mTextViewnull, или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,разрешение пользователя ' и др.
вы можете использовать любой из этих инструментов:
adb logcat
adb logcat > журналы.txt (вы можете использовать редакторы для открытия и поиска ошибок.)
чтение logcat в Eclipse (если он не виден в Eclipse, откройте окно->Показать панель->прочие->Андроид->чтение logcat)
- Android Debug Monitor или Android Device Monitor(введите команду монитор или открыть через UI)
- 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