无法从Util类型对非静态方法getIMEI()进行静态引用

时间:2013-01-31 12:50:27

标签: android exception imei

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String test =  Util.imei();
}


import android.content.Context;
import android.telephony.TelephonyManager;

public class Util{
    Context context;

    public Util(Context context) {
        this.context = context;
    }

    public String imei() {
        TelephonyManager telephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getDeviceId();
    }
}

获取错误“无法从Util类型中对非静态方法imei()进行静态引用”。 如果我将行更改为:

public static String imei() {
    ...
    static Context context;

我收到错误并崩溃了应用程序。(“E / AndroidRuntime(629):引起:java.lang.NullPointerException”)

3 个答案:

答案 0 :(得分:3)

写两种方式:

第一次 非静态

public class Util {
    Context context;

    public Util(Context context) {
        this.context = context;
    }

    public String imei() {
        TelephonyManager telephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getDeviceId();
    }
}

然后在onCreate方法

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Util u = new Util(this);
    String test =  u.imei();
}

第二次 静态

public class Util {
    public static String imei(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getDeviceId();
    }
}

然后在onCreate方法

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String test =  Util.imei(this);
}

答案 1 :(得分:0)

在访问其方法之前首先创建Util类的引用。

Util util = new Util();
String _imei = util.imei();

答案 2 :(得分:0)

您正在尝试访问类中的方法而不为其创建对象。只有静态方法,我们可以这样调用。在您的情况下,为Util创建一个对象,并使用该对象调用imei()

像,

Util utilObj = new Util();
String imei = utilObj.imei();

希望这有帮助。