Предупреждение об исключении в методе windowManager.getDefaultDisplay () - PullRequest
0 голосов
/ 28 августа 2018

Я использую этот метод ниже, чтобы получить фактическую ширину и высоту в пикселях экрана устройства внутри onCreate() метода моего Activity:

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);

int absolute_screen_width_in_pixels = point.x;
int absolute_screen_height_in_pixels = point.y;

Тем не менее, у меня есть это предупреждение, подчеркивающее возможность NullPointerException: enter image description here

Я еще никогда не ловил это Exception, и я не могу вспомнить ситуацию, когда это могло произойти. Что я должен сделать, чтобы этот NullPointerException никогда не бросался?

Кроме того, какой резервный код я должен написать, чтобы получить реальные физические размеры экрана в случае сбоя этого метода?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вместо того, чтобы пытаться получить WindowManager из getSystemService контекста (возможно, вернуть ноль), извлеките его из действия.

WindowManager windowManager = activity.getWindowManager(); //This method always return not null.

DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
int screeWith = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;

Надеюсь, это поможет!

0 голосов
/ 29 августа 2018

Это связано с тем, что getSystemService(...) внутренне помечено @Nullable.

Если вы передали недопустимое имя системной службы (вместо WINDOW_SERVICE, которое является константой в классе Context, я считаю, что передано "dummyName"), оно вернет ноль.

Поскольку вы используете ссылку, аннотированную как «может быть нулевым» (windowManager), чтобы получить какое-либо свойство (getDefaultDisplay ()), отсюда и предупреждение IDE.

Заключение

Это должно быть безопасно, если вы используете предопределенные константы в Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...