как избавиться от NPExceptions в "громоздких" проектах

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

как избавиться от NPExceptions в "громоздких" проектах

Сообщение mdzht » 17 фев 2015, 08:14

Салам пацанам.
Вроде бы? вопрос простой, null значит сделай не null. Но когда в проекте появляются много разных объектов, со временем, гарбаж хавает эти объекты. При попытке запустить приложение в след. день получаю NPE. исправляю, все равно, разные(другие, бесконечные) нулы. Хотел спросить, как вы работаете, с объектами, в "громоздких" (:запутанных) проектах. Видимо, допускаю очень простую, но весьма серьезную вещь.
структура моего кода такова:
[syntax=java5]oncreate(){
// Инициализируются объекты
mainFragment=new MainFragment(this);
detailFragment=new DetailFragment(this);
listFragment = new ListFragment(this);
loginFragment = new LoginFragment(this);
if(loggedIN())
{
currentFragment=mainFragment;
getSupportFragmentManager().beginTransaction().add(R.id.main_fragment, currentFragment).commit();
} else
{
currentFragment=loginFragment;
getSupportFragmentManager().beginTransaction().add(R.id.login_fragment, currentFragment).commit();
}
}[/syntax]
в маин активити есть пару реализации методы показов разных фрагментов. поэтому, в из других фрагментов, при попытке вызвать метод(допустип activity.showMainFragment()) получаю null pointer. часто это бывает, вот на этой строке:
[syntax=java5]if (currentFragment.getClass().equals(fragment.getClass())) {
return;
}[/syntax]
Для меня становится туманным, почему в oncreate, mainFragment или loginFragment т.е (currentFragment) НЕпроинициализировались..
«Life is too short to spend rewriting code»

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение Mikhail_dev » 17 фев 2015, 08:48

Потому что фрагмент создаётся асихронно и в момент его инициализации, его вьюшка как минимум будет null.
со временем, гарбаж хавает эти объекты.
Ничего он не хавает. Он уничтожает объекты только если на них никто не ссылается.

С NPE бороться очень просто - не доводить до NPE

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение KamiSempai » 17 фев 2015, 11:55

- Не допускать запутанности. Классы должны быть как можно более независимы друг от друга.
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон). А если лень писать по нормальному, всегда проверять их на null.
- Следить за жизненным циклом, возможно в этот момент объект еще не инициализоровался.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение mdzht » 17 фев 2015, 11:59

Mikhail_dev писал(а):Потому что фрагмент создаётся асихронно и в момент его инициализации, его вьюшка как минимум будет null.
После того как получаем unfortunately has stopped приложение работает без проблем. не думаю что это из-за асинхронности.
Ошибку получаю, именно после долгого перерыва.
«Life is too short to spend rewriting code»

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение KamiSempai » 17 фев 2015, 12:44

mdzht писал(а):Ошибку получаю, именно после долгого перерыва.
KamiSempai писал(а):- Никогда не использовать статические, не final, ссылки на объекты
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение Mikhail_dev » 17 фев 2015, 15:15

После того как получаем unfortunately has stopped приложение работает без проблем.
5 баллов! :lol:
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон).
А почему он исключение?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение KamiSempai » 17 фев 2015, 18:22

Mikhail_dev писал(а):
После того как получаем unfortunately has stopped приложение работает без проблем.
5 баллов! :lol:
Так и есть. После вывода сообщения об ошибке приложение само перезапускается и продолжает работать как ни в чем не бывало.
Mikhail_dev писал(а):
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон).
А почему он исключение?
По тому, что хоть он и ленивый но nill-ом ни когда не бывает :)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение Mikhail_dev » 17 фев 2015, 19:08

Так и есть. После вывода сообщения об ошибке приложение само перезапускается и продолжает работать как ни в чем не бывало.
Вообще-то умирает процесс и оно не всегда перезапускается.
По тому, что хоть он и ленивый но nill-ом ни когда не бывает :)
Ага, а еще он все свои и динамические объекты уничтожил.

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: как избавиться от NPExceptions в "громоздких" проектах

Сообщение mdzht » 17 фев 2015, 20:08

Mikhail_dev писал(а):Ага, а еще он все свои и динамические объекты уничтожил.
Он это кто? гарбедж?)
«Life is too short to spend rewriting code»

Ответить