在自定义新类中没有获得屏幕分辨率

时间:2014-11-28 16:23:11

标签: android

我是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);
    }
}

2 个答案:

答案 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);