通过外部非静态类方法检测android网络

时间:2014-01-22 20:22:25

标签: android android-networking

我想知道是否有人能解释我一直遇到的问题。下面是我目前在每个课程中放置的一段代码,用于检查Android手机网络是否可用:

private boolean isNetworkAvailable() {

    ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = manager.getActiveNetworkInfo();

    boolean isAvailable = false;

    if(networkInfo != null && networkInfo.isConnected()) {
        isAvailable = true;
    }

    return isAvailable;
}   

当作为私有方法放置在每个类的底部时,这非常有效,但是就DRY原则而言,这并没有太大的重要性,所以我试图把它放在一个名为'appHelpers'的外部类中,将其公开,然后每次我想使用该方法时,只需调用appHelpers类:

public boolean isNetworkAvailable() {
    ...
}

现在,如果我尝试直接从其类调用该方法,如下所示:

if(appHelpers.isNetworkAvailable()) {
    ...
}

我熟悉“无法从appHelpers类型中对非静态方法isNetworkAvailable()进行静态引用”。但是,如果我试图在appHelpers()中使方法静态,我在这行的“getSystemService(Context ...)方面得到一个红线:

ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

错误报告为“无法从ContextWrapper类型中对非静态方法getSystemService(String)进行静态引用”。

我似乎无法看到问题在这里,我也没有更接近解决问题。有没有人知道这个?我提前感谢。

1 个答案:

答案 0 :(得分:1)

你需要传递Context(来自getContext()或“this”,如果它是一个活动,作为静态方法的新参数并调用context.getSystemService。

public static boolean isNetworkAvailable (Context context) {
    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

基本上,您可能习惯于从像Activity一样扩展Context的类中调用getSystemService。

现在从活动中调用类似的东西     if(appHelpers.isNetworkAvailable(this)){

if (appHelpers.isNetworkAvailable (getContext ())) {

取决于您从哪里拨打电话。

您可以将辅助方法设置为静态,或者向辅助工具添加构造函数以传入上下文并让帮助程序将上下文保留为成员。