2014-01-22 29 views
0

我想知道是否有人可以解釋我遇到的問題。下面是我目前放在我的每一個類來檢查,如果Android手機網絡可用的代碼段:通過外部非靜態類方法檢測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(上下文...)這行的方面:

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

與錯誤報告爲」不能讓一個靜態引用從類型爲ContextWrapper的非靜態方法getSystemService(String)「。

我只是不能看到問題在這裏,我也不是更接近解決問題。有沒有人有這方面的知識?我提前致謝

回答

1

您需要傳遞上下文(從getContext()或「this」(如果它是一個活動)作爲新的參數傳遞給靜態方法並調用context.getSystemService。

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

基本上,您可能習慣從擴展上下文(如Activity)的類中調用getSystemService。

現在從活動通話像 如果(appHelpers.isNetworkAvailable(本)){

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

這取決於你在哪裏調用它。

您可以使助手方法爲靜態,或向助手添加構造函數以傳遞上下文,並讓助手保持上下文爲成員。

+0

優秀的東西,謝謝你,埃裏克!我認爲這是一個問題,我把它公開而不是私人 - 我不知道它是什麼,但上下文使我非常困惑。謝謝你的幫助。 –

相關問題