java .lang.NullPointerException сразу после инициализации объекта с помощью findViewById - PullRequest
0 голосов
/ 24 февраля 2020

Это странный взлом sh, потому что приложение протестировано и работает нормально (без ошибок) на 5-6 Android тестировании телефонов, но магазин Play сообщает о cra sh примерно в 2% сеансов, что является слишком высоким (максимально допустимое для Google значение составляет 1,09%).

Исключение NullPointerException возникает во многих местах приложения без каких-либо логических причин, поскольку все объекты объявлены в уровень класса и были инициализированы в начале onCreate:

Это всего лишь один пример из многих:

btn_display_mode = findViewById(R.id.btn_display_mode);

.
.
(some code in the same class_
.
.
btn_display_mode.setOnClickListener(new View.OnClickListener() {    <---- java.lang.NullPointerException
    @Override
    public void onClick(View view) {
        updateDisplayMode(displayMode);
    }
});

А вот еще одно место для той же ошибки:

       mAdView = findViewById(R.id.adView);
       adRequest = new AdRequest.Builder().build();
       mAdView.loadAd(adRequest);                    <---- java.lang.NullPointerException


Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Спасибо Грегу.

Причины проблемы были в том, что я решил заставить приложение работать только в портретной ориентации и добавил следующие строки в "onResume", а не в "onCreate"

       //--------------------- USE FULL SCREEN & KEEP SCREEN ON ------------------------
        WindowManager.LayoutParams params = this.getWindow().getAttributes();
        params.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

в то же время существовал обширный ландшафтный макет под названием "activity_main (Land)", который я не удалил, и он не содержал все объекты, содержащиеся в "activity_main".

моя ошибка была помещая эти 2 строки кода в начало «onResume», а не в начало «onCreate», поэтому, когда приложение запускается в ландшафтном режиме, оно обработает sh, потому что оно не найдет все объекты в «activity_main (Land)

0 голосов
/ 24 февраля 2020

пожалуйста, попробуйте так:

btn_display_mode = (Button)findViewById(R.id.btn_display_mode);

...