как избавиться от NPExceptions в "громоздких" проектах
как избавиться от NPExceptions в "громоздких" проектах
Салам пацанам.
Вроде бы? вопрос простой, 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) НЕпроинициализировались..
Вроде бы? вопрос простой, 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 в "громоздких" проектах
Потому что фрагмент создаётся асихронно и в момент его инициализации, его вьюшка как минимум будет null.
С NPE бороться очень просто - не доводить до NPE
Ничего он не хавает. Он уничтожает объекты только если на них никто не ссылается.со временем, гарбаж хавает эти объекты.
С NPE бороться очень просто - не доводить до NPE
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: как избавиться от NPExceptions в "громоздких" проектах
- Не допускать запутанности. Классы должны быть как можно более независимы друг от друга.
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон). А если лень писать по нормальному, всегда проверять их на null.
- Следить за жизненным циклом, возможно в этот момент объект еще не инициализоровался.
- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон). А если лень писать по нормальному, всегда проверять их на null.
- Следить за жизненным циклом, возможно в этот момент объект еще не инициализоровался.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: как избавиться от NPExceptions в "громоздких" проектах
После того как получаем unfortunately has stopped приложение работает без проблем. не думаю что это из-за асинхронности.Mikhail_dev писал(а):Потому что фрагмент создаётся асихронно и в момент его инициализации, его вьюшка как минимум будет null.
Ошибку получаю, именно после долгого перерыва.
«Life is too short to spend rewriting code»
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: как избавиться от NPExceptions в "громоздких" проектах
mdzht писал(а):Ошибку получаю, именно после долгого перерыва.
KamiSempai писал(а):- Никогда не использовать статические, не final, ссылки на объекты
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: как избавиться от NPExceptions в "громоздких" проектах
5 баллов!После того как получаем unfortunately has stopped приложение работает без проблем.
А почему он исключение?- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон).
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: как избавиться от NPExceptions в "громоздких" проектах
Так и есть. После вывода сообщения об ошибке приложение само перезапускается и продолжает работать как ни в чем не бывало.Mikhail_dev писал(а):5 баллов!После того как получаем unfortunately has stopped приложение работает без проблем.
По тому, что хоть он и ленивый но nill-ом ни когда не бываетMikhail_dev писал(а):А почему он исключение?- Никогда не использовать статические, не final, ссылки на объекты (Исключение, ленивый синглтон).
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: как избавиться от NPExceptions в "громоздких" проектах
Вообще-то умирает процесс и оно не всегда перезапускается.Так и есть. После вывода сообщения об ошибке приложение само перезапускается и продолжает работать как ни в чем не бывало.
Ага, а еще он все свои и динамические объекты уничтожил.По тому, что хоть он и ленивый но nill-ом ни когда не бывает
Re: как избавиться от NPExceptions в "громоздких" проектах
Он это кто? гарбедж?)Mikhail_dev писал(а):Ага, а еще он все свои и динамические объекты уничтожил.
«Life is too short to spend rewriting code»