0

我有一个名为的主包omer.ludlowcastle和另一个包omer.ludlowcastle.utils

我写了这个函数omer.ludlowcastle.utils

public boolean checkInternet (){
    final ConnectivityManager conMgr =  (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        return true;
    } else {
        Toast.makeText(getApplicationContext(), "You are not connected to Internet", Toast.LENGTH_LONG).show();
        return false;
    }
}

我在主包的一个活动中使用这个函数:

public void Login (View v){
    if(omer.ludlowcastle.utils.functions.checkInternet()){
        //do other stuff
    }

    else {
        //do other stuff
    }
}

但是大括号中的行if给出了以下错误:

Cannot make a static reference to the non-static method checkInternet() from the type functions

如何解决这个问题?

4

5 回答 5

1

使方法静态:

public static boolean checkInternet()

或者,获取 checkInternet 函数所在的任何类的对象,然后调用它的checkInternet()函数,但是创建静态方法可能会占用较少的资源。

于 2013-01-07T13:07:03.463 回答
0

您必须将 utils 包中的方法设置为静态。

public static boolean checkInternet()

实用程序类用于生成静态方法并且它们不保存状态,因此如果您编写实用程序类,则方法必须是静态的。这是一般用途。

于 2013-01-07T13:06:35.800 回答
0

修改您的方法并使其成为静态

public static boolean checkInternet (){
    final ConnectivityManager conMgr =  (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        return true;
    } else {
        Toast.makeText(getApplicationContext(), "You are not connected to Internet", Toast.LENGTH_LONG).show();
        return false;
    }
}
于 2013-01-07T13:08:19.627 回答
0

只需将您的方法设为静态:

public static boolean checkInternet (){
    final ConnectivityManager conMgr =  (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();

    if (activeNetwork != null && activeNetwork.isConnected()) {
        return true;
    } else {
        Toast.makeText(getApplicationContext(), "You are not connected to Internet", Toast.LENGTH_LONG).show();
        return false;
    }
}
于 2013-01-07T13:09:00.987 回答
0

无法从类型函数中对非静态方法 checkInternet() 进行静态引用,因为方法不是静态的。您有 2 个选项:

  1. 将类 Functions 和方法 checkInternet() 声明为静态。它是更合适的方式,因为它是 Utility 类的方法。因此,您可以像现在使用它一样调用它。

2.或者创建一个类的对象为

Functions funObj = new Functions();

然后使用对象调用方法作为

public void Login (View v){
    if(funObj.checkInternet()){
        //do other stuff
    }

    else {
        //do other stuff
    }
}

希望能帮助到你。

于 2013-01-07T13:09:13.810 回答