我试图为我的女儿开发一个简单的应用程序,但我不是专业人士:)
我想知道如何将上下文传递给布尔方法?
我的问题是,在尝试合并以下代码时
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
参数。
答案 0 :(得分:4)
你应该替换它:
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;
}
答案 1 :(得分:0)
是的,在Android中经常需要引用上下文。
基本上,如果你看一下Context class doc,你会看到,2个非常重要的类是从它子类化的:应用程序和活动(包括像FragmentActivity这样的所有变体等)。
所以这项技术很简单:在需要上下文的任何地方你都可以做其中一个
将活动/应用程序对象作为上下文传递
使用Singleton模式保留Context字段(经常使用自定义Application类,请参阅getApplicationContext())
关于你的代码:
getSystemService()
实际上是Context类的一种方法,我猜你在Activity对象里面调用它(因为Activity是一个Context子类)。因此没有理由在... if (isNetworkAvailable(context)) ...
中传递Context对象,只需删除此参数,直到isNetworkAvailable()
方法保留在Activity中。
谨防保持对上下文的强烈引用!
答案 2 :(得分:-1)
private boolean isNetworkAvailable(Context ctx) {
ConnectivityManager connectivityManager
= (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;}