NullPointerException

Интерфейс, диалоги, темы, стили, меню
Закрыто
Perfomer
Сообщения: 14
Зарегистрирован: 05 авг 2015, 18:38

NullPointerException

Сообщение Perfomer » 05 авг 2015, 19:25

В общем, пишу класс-обёртку для 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 (хотя несколькими строчками выше я её определяю!)
Что делать с эксепшнеом? Как сделать, чтобы работало?

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

Re: NullPointerException

Сообщение Mikhail_dev » 05 авг 2015, 19:29

Покажите метод onCreate

Perfomer
Сообщения: 14
Зарегистрирован: 05 авг 2015, 18:38

Re: NullPointerException

Сообщение Perfomer » 05 авг 2015, 19:50

Код: Выделить всё

@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);
}

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

Re: NullPointerException

Сообщение Mikhail_dev » 05 авг 2015, 22:27

Откуда WelloFontManager получает ссылку на контекст? Он вызывает метод findViewById у неизвестного объекта активности. Где вы этот менеджер держите?

Perfomer
Сообщения: 14
Зарегистрирован: 05 авг 2015, 18:38

Re: NullPointerException

Сообщение Perfomer » 06 авг 2015, 08:55

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 сообщить контекст? Только как?

Perfomer
Сообщения: 14
Зарегистрирован: 05 авг 2015, 18:38

Re: NullPointerException

Сообщение Perfomer » 06 авг 2015, 08:55

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 сообщить контекст? Только как?

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

Re: NullPointerException

Сообщение Mikhail_dev » 06 авг 2015, 09:43

Нет, вы не поняли. Я хочу узнать где находится этот самый менеджер? В классе какой-то активности? Ибо как он вызывает метод findViewById . getFont кстати у вас тоже null возвращает.

Perfomer
Сообщения: 14
Зарегистрирован: 05 авг 2015, 18:38

Re: NullPointerException

Сообщение Perfomer » 06 авг 2015, 10:04

Класс менеджера в отдельном файле *.java и наследуется от TextView. Объект класса WelloFontManager mFontManager, через который я пытаюсь инициализировать текствьюшки, находится в MainActivity.
Вызов метода findViewById не вызывает нареканий у компилятора, потому что этот метод принадлежит классу View (а вызов этого метода происходит из WelloFontManager, который унаследован от TextView).
p.s про getFont знаю, он ещё не настроен.

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

Re: NullPointerException

Сообщение Mikhail_dev » 06 авг 2015, 10:44

Класс менеджера в отдельном файле *.java и наследуется от TextView.
Вы по сути у этого TextView пытаетесь найти внутри него другие элементы, а именно искомый TextView. Попробуйте для примера передать рутовую вьюшку в метод getTextView (вроде так делается - getWindow().getDecorView().findViewById(android.R.id.content) ), и у этой вьюшки найти искомый resId. Если отработает нормально, то значит я тут прав.

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: NullPointerException

Сообщение Dark67 » 06 авг 2015, 12:02

Можно передавать Activity в конструктор (не Context, а именно Activity)

Perfomer
Сообщения: 14
Зарегистрирован: 05 авг 2015, 18:38

Re: NullPointerException

Сообщение Perfomer » 07 авг 2015, 05:40

Спасибо за помощь, ребят. Идея с передачей Activity в конструктор, а потом вызов метода findViewById через эту активити сработали.

Закрыто