Android - 如何将上下文参数传递给方法?

Android - how to pass context parameter to a method?

我正在尝试为我女儿开发一个简单的应用程序,但我不是专业人士:)

我想知道如何将上下文传递给布尔方法?

我的问题是,在尝试合并下面的两个代码时

private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;}

public static boolean hasActiveInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
    try {
        HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
        urlc.setRequestProperty("User-Agent", "Test");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(1500); 
        urlc.connect();
        return (urlc.getResponseCode() == 200);
    } catch (IOException e) {
        Log.e(LOG_TAG, "Error checking internet connection", e);
    }
} else {
    Log.d(LOG_TAG, "No network available!");
}
return false;}

我收到错误消息是因为我不知道如何传递 Context 参数。

private boolean isNetworkAvailable(Context ctx) {
ConnectivityManager connectivityManager 
     = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;}

是的,在 Android 中经常需要引用上下文。

基本上,如果您看一下 Context class doc,您会发现 2 个非常重要的 classes 是从 class 中提取的:Application 和 Activity(包括它的所有变体,如 FragmentActivity 等)。

因此该技术很简单:在任何需要上下文的地方,您都可以执行其中一项

  • 将 Activity/Application 对象作为上下文传递

  • 使用单例模式来保持上下文字段(自定义应用程序 class 通常用于它,请参阅 getApplicationContext()

关于您的代码:
getSystemService() 实际上是 Context class 的一个方法,我猜你在 Activity 对象内部的某处调用它(因为 Activity 是一个 Context subclass) .所以没有理由在 ... if (isNetworkAvailable(context)) ... 中传递 Context 对象,只需删除此参数,直到 isNetworkAvailable() 方法保留在 Activity.

注意保持对上下文的强引用!

你应该替换这个:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
         = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

有了这个:

private boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}