Страница 1 из 1
NullPointerException
Добавлено: 05 авг 2015, 19:25
Perfomer
В общем, пишу класс-обёртку для TextView, который ставил бы мне сразу шрифты (Typeface) на вьюшки.
Переделал немножко смысл определения переменных TextView, было так:
Код: Выделить всё
TextView myTV = (TextView) findViewById(R.id.myTV);
Теперь это выглядит так:
Код: Выделить всё
TextView myTV = fontManager.getTextView(R.id.myTV, 3, false); //3 - id шрифта, false - все не капсом)
Вот метод getTextView:
Код: Выделить всё
public TextView getTextView(int resId, int fontId, boolean allCaps) {
TextView textView = (TextView) findViewById(resId);
Typeface font = getFont(fontId);
if (font != null) textView.setTypeface(font);
textView.setAllCaps(allCaps);
return textView;
}
В нём ошибка на этой строчке
textView.setAllCaps(allCaps);
Выдаёт NullPointerException на переменной textView (хотя несколькими строчками выше я её определяю!)
Что делать с эксепшнеом? Как сделать, чтобы работало?
Re: NullPointerException
Добавлено: 05 авг 2015, 19:29
Mikhail_dev
Покажите метод onCreate
Re: NullPointerException
Добавлено: 05 авг 2015, 19:50
Perfomer
Код: Выделить всё
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWFontManager = new WelloFontManager(this);
setContentView(R.layout.activity_menu);
TextView mTVExit = mWFontManager.getTextView(R.id.layout_menu_button_exit, 3, true);
}
Re: NullPointerException
Добавлено: 05 авг 2015, 22:27
Mikhail_dev
Откуда WelloFontManager получает ссылку на контекст? Он вызывает метод findViewById у неизвестного объекта активности. Где вы этот менеджер держите?
Re: NullPointerException
Добавлено: 06 авг 2015, 08:55
Perfomer
WelloFontManager получает ссылку на контекст в конструкторе:
Код: Выделить всё
public WelloFontManager(Context context) {
super(context);
wfmContext = context; //нигде не используется
wtvFontEnemyName = Typeface.createFromAsset(context.getAssets(), "fonts/ft_enemy_name.ttf");
wtvFontMainRegular = Typeface.createFromAsset(context.getAssets(), "fonts/ft_main_regular.ttf");
wtvFontMainBold = Typeface.createFromAsset(context.getAssets(), "fonts/ft_main_bold.ttf");
}
Может, как-то методу findViewById сообщить контекст? Только как?
Re: NullPointerException
Добавлено: 06 авг 2015, 08:55
Perfomer
WelloFontManager получает ссылку на контекст в конструкторе:
Код: Выделить всё
public WelloFontManager(Context context) {
super(context);
wfmContext = context; //нигде не используется
wtvFontEnemyName = Typeface.createFromAsset(context.getAssets(), "fonts/ft_enemy_name.ttf");
wtvFontMainRegular = Typeface.createFromAsset(context.getAssets(), "fonts/ft_main_regular.ttf");
wtvFontMainBold = Typeface.createFromAsset(context.getAssets(), "fonts/ft_main_bold.ttf");
}
Может, как-то методу findViewById сообщить контекст? Только как?
Re: NullPointerException
Добавлено: 06 авг 2015, 09:43
Mikhail_dev
Нет, вы не поняли. Я хочу узнать где находится этот самый менеджер? В классе какой-то активности? Ибо как он вызывает метод findViewById . getFont кстати у вас тоже null возвращает.
Re: NullPointerException
Добавлено: 06 авг 2015, 10:04
Perfomer
Класс менеджера в отдельном файле *.java и наследуется от TextView. Объект класса WelloFontManager mFontManager, через который я пытаюсь инициализировать текствьюшки, находится в MainActivity.
Вызов метода findViewById не вызывает нареканий у компилятора, потому что этот метод принадлежит классу View (а вызов этого метода происходит из WelloFontManager, который унаследован от TextView).
p.s про getFont знаю, он ещё не настроен.
Re: NullPointerException
Добавлено: 06 авг 2015, 10:44
Mikhail_dev
Класс менеджера в отдельном файле *.java и наследуется от TextView.
Вы по сути у этого TextView пытаетесь найти внутри него другие элементы, а именно искомый TextView. Попробуйте для примера передать рутовую вьюшку в метод getTextView (вроде так делается - getWindow().getDecorView().findViewById(android.R.id.content) ), и у этой вьюшки найти искомый resId. Если отработает нормально, то значит я тут прав.
Re: NullPointerException
Добавлено: 06 авг 2015, 12:02
Dark67
Можно передавать Activity в конструктор (не Context, а именно Activity)
Re: NullPointerException
Добавлено: 07 авг 2015, 05:40
Perfomer
Спасибо за помощь, ребят. Идея с передачей Activity в конструктор, а потом вызов метода findViewById через эту активити сработали.