Android windowManager.getDefaultDisplay()方法中出现异常警告
我使用下面的方法来获取我的Android windowManager.getDefaultDisplay()方法中出现异常警告,android,nullpointerexception,screen-size,android-windowmanager,Android,Nullpointerexception,Screen Size,Android Windowmanager,我使用下面的方法来获取我的活动的方法的onCreate()内设备屏幕的实际宽度和高度(以像素为单位): WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point point = new Point(); display.getSize(point); int absolute_
活动的方法的onCreate()
内设备屏幕的实际宽度和高度(以像素为单位):
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
的可能性:
我还从来没有发现过这种异常,我想不出会发生这种情况。我应该如何确保从不抛出此NullPointerException
另外,如果此方法失败,我应该编写什么备份代码来获取实际的物理屏幕尺寸?这是因为getSystemService(…)
在内部用@Nullable
注释
如果您传递了一个无效的系统服务名称(而不是WINDOW\u service
,它是上下文中的一个常量,我相信传递“dummyName”)它将返回null
由于您正在使用注释为“可能为空”(windowManager)的引用来获取某些属性(getDefaultDisplay()),因此会出现IDE警告
结论
只要您使用Android预定义的常量,它就应该是安全的。这是因为getSystemService(…)
在内部用@Nullable
注释
如果您传递了一个无效的系统服务名称(而不是WINDOW\u service
,它是上下文中的一个常量,我相信传递“dummyName”)它将返回null
由于您正在使用注释为“可能为空”(windowManager)的引用来获取某些属性(getDefaultDisplay()),因此会出现IDE警告
结论
只要您使用Android预定义的常量,就应该是安全的。不要试图从上下文的getSystemService获取WindowManager(可能返回null),而是从活动中提取它
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;
希望这有帮助 不要试图从上下文的getSystemService获取WindowManager(可能返回null),而是从活动中提取它
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;
希望这有帮助 谢谢你的回答,我在其他几个地方进行了检查,这似乎是正确的方法。谢谢你的回答,我在其他几个地方进行了检查,这似乎是正确的方法。