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;
}
我正在尝试为我女儿开发一个简单的应用程序,但我不是专业人士:)
我想知道如何将上下文传递给布尔方法?
我的问题是,在尝试合并下面的两个代码时
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;
}