Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android windowManager.getDefaultDisplay()方法中出现异常警告_Android_Nullpointerexception_Screen Size_Android Windowmanager - Fatal编程技术网

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;

希望这有帮助

谢谢你的回答,我在其他几个地方进行了检查,这似乎是正确的方法。谢谢你的回答,我在其他几个地方进行了检查,这似乎是正确的方法。