Примітка. У цій відповіді використовується Android Studio 2.2.2
Примітка 2: Я вважаю, що ваш пристрій успішно підключено.
Перше, що ви робите, коли ваш додаток виходить з ладу, це заглянути в LogCat, внизу Android Studio є панель інструментів зі списком меню:
Клацніть на "Монітор Android" (той, який я підкреслив на зображенні вище. ^)
Тепер ви отримаєте щось подібне:
Змініть " Verbose
" на " Error
" Тепер він показуватиме лише помилки, за якими ви увійшли. Не хвилюйтесь про всі ці помилки (якщо ви їх отримали) зараз.
Добре. Тепер зробіть те, що ви зробили, щоб зламати додаток. Після завершення роботи програми перейдіть до своєї логічної коди. Ви повинні знайти новий журнал аварій, у якому багато at:x.x.x
: і, Caused by: TrumpIsPresidentException
наприклад. Перейдіть до цього Caused by:
твердження у своїй логічній коді
Поруч із цим Caused By:
має бути виняток, що стався. У моєму випадку це a, RuntimeException
і під ним має бути рядок, що містить синє посилання, наприклад:
Якщо в цьомуCaused by:
НЕ є рядок із синім текстом десь під ним, тоді шукайте інший, Caused by:
який має.
Натисніть на синє посилання . Це повинно перевезти вас до місця виникнення проблеми. У моєму випадку це було пов’язано з цим рядком:
throw new RuntimeException();
Отож, тепер я знаю, чому це врізається. Це тому, що я сам кидаю виняток. Це була очевидна помилка .
Однак, скажімо, я отримав ще одну помилку:
java.lang.NullPointerException
Я перевірив свою логіт, я натиснув на синє посилання, яке воно мені дало, і воно взяло мене тут:
mTextView.setText(myString);
Отже, зараз я хочу налагодити. Відповідно до цього питання StackOverflow , NullPointerException говорить, що щось є null
.
Отже, давайте з’ясуємо, що є нульовим . Є дві можливості. Або mTextView
нульовим, або myString
нульовим. Щоб дізнатися, перед mTextView.setText(mString)
рядком я додаю ці два рядки:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
Тепер, як і раніше (ми змінили Верозу на помилку), ми хочемо змінити "Помилка" на "Налагодження". Оскільки ми ведемо реєстрацію за допомогою налагодження. Ось усі методи Журналу:
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
, ми перевіряємо в Налагодження. Тому ми змінили його на налагодження.
Повідомлення Log.d
має перший параметр, у нашому випадку - "AppDebug". Клацніть спадне меню "Без фільтрів" у верхньому правому куті логката. Виберіть "Змінити конфігурацію фільтра", вкажіть ім'я фільтру та в "Журнал журналу" поставте "Налагодження додатка". Натисніть "ОК". Тепер у логкатах вам слід побачити два рядки:
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
це недійсно, тому що я забув сказати моєму додатку, що це таке. Тож я додаю цей рядок, запускаю додаток, і тепер додаток не виходить з ладу.