Страница 1 из 1

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

Добавлено: 17 фев 2015, 08:14
mdzht
Салам пацанам.
Вроде бы? вопрос простой, 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) НЕпроинициализировались..

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

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

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

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

Добавлено: 17 фев 2015, 11:55
KamiSempai
- Не допускать запутанности. Классы должны быть как можно более независимы друг от друга.
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон). А если лень писать по нормальному, всегда проверять их на null.
- Следить за жизненным циклом, возможно в этот момент объект еще не инициализоровался.

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

Добавлено: 17 фев 2015, 11:59
mdzht
Mikhail_dev писал(а):Потому что фрагмент создаётся асихронно и в момент его инициализации, его вьюшка как минимум будет null.
После того как получаем unfortunately has stopped приложение работает без проблем. не думаю что это из-за асинхронности.
Ошибку получаю, именно после долгого перерыва.

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

Добавлено: 17 фев 2015, 12:44
KamiSempai
mdzht писал(а):Ошибку получаю, именно после долгого перерыва.
KamiSempai писал(а):- Никогда не использовать статические, не final, ссылки на объекты

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

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

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

Добавлено: 17 фев 2015, 18:22
KamiSempai
Mikhail_dev писал(а):
После того как получаем unfortunately has stopped приложение работает без проблем.
5 баллов! :lol:
Так и есть. После вывода сообщения об ошибке приложение само перезапускается и продолжает работать как ни в чем не бывало.
Mikhail_dev писал(а):
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон).
А почему он исключение?
По тому, что хоть он и ленивый но nill-ом ни когда не бывает :)

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

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

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

Добавлено: 17 фев 2015, 20:08
mdzht
Mikhail_dev писал(а):Ага, а еще он все свои и динамические объекты уничтожил.
Он это кто? гарбедж?)