我是Android开发的新手,经过几个小时的努力,我决定在这里提问。我试图在新类的帮助下获取屏幕分辨率。如果我在MyActivity.java中实现代码,那么它工作正常,但如果我尝试在新类中实现代码,那么它会给我空指针异常。
以下是我试图在MyActivity类中访问的新类,但它无法正常工作并且给出空指针异常。
public class DeviceInfoClass {
public String getScreenResolutionWidth(){
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
return String.valueOf(screenWidth);
}
}
答案 0 :(得分:0)
您需要Context
个实例。然后您就可以使用以下方法:
public static int getScreenWidth(Context context) {
return getContext().getResources().getDisplayMetrics().widthPixels;
}
从Activity
您可以像这样使用它:
int width = getScreenWidth(this);
同样不要在Activity
中定义和使用非静态类,它是内存泄漏的常见来源。在您的情况下,最简单的解决方案是将DeviceInfoClass
标记为static class
。
答案 1 :(得分:-1)
您应该将活动的上下文传递给类
public class DeviceInfoClass {
public String getScreenResolutionWidth(Context c){
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager)c.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
return String.valueOf(screenWidth);
}
}
编辑:
您可以这样称呼它:
DeviceInfoClass def = new DeviceInfoClass();
String w = def.getScreenResolutionWidth(this);
Toast.makeText(this, w , Toast.LENGTH_LONG).show();
另一种方法: 是使函数静态像这样:
public class DeviceInfoClass {
public static String getScreenResolutionWidth(Context c){
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager)c.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
return String.valueOf(screenWidth);
}
}
并在主要活动中将其称为:
String w = DeviceInfoClass.getScreenResolutionWidth(this);