我正在尝试在AsyncTask中实现Android中的Internet检查。我为此创建了一个单独的类文件。目的是在doInBackground中检查Internet并将值返回到onPostExecute - 并在主UI线程中显示结果。但isNetworkAvailable(context)的上下文参数必须是什么?现在它给出了关于参数的错误。 isNetworkAvailable也可以吗?
如何在onPostExecute中使用此值并将其传递给主UI线程?
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
class InternetCheck extends AsyncTask<Void, Void, Boolean> {
protected Boolean doInBackground(Void... noargs) {
return isNetworkAvailable(this);
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(String result) {
}
public static boolean isNetworkAvailable(Context context)
{
return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
}
}
答案 0 :(得分:4)
将您的活动/ Fragement作为上下文传递。作为一个非常简单的例子:
class InternetCheck extends AsyncTask<Activity, Void, Boolean> {
protected Boolean doInBackground(Activity... activitys) {
return isNetworkAvailable(activitys[0]);
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(String result) {
}
public static boolean isNetworkAvailable(Context context)
{
return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
}
}
作为旁注:我不确定获取网络信息确实需要花费很多时间在后台进行。
答案 1 :(得分:2)
无需为此执行AsyncTask:
/** This method check internet connection. True for connection enabled, false otherwise. */
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
对于您使用网络执行的所有操作,请不要忘记权限。
答案 2 :(得分:1)
您需要活动背景
((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
在您的情况下,this
不会引用活动背景。
protected Boolean doInBackground(Void... noargs) {
return isNetworkAvailable(this);
}
我不确定以下发布的代码是否是最佳方式。您可以检查连接是否可用,然后执行某项任务。
public class NetworkHelper {
private static final String TAG=NetworkHelper.class.getSimpleName();
public static boolean isInternetAvailable(Context context)
{
NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info == null)
{
Log.d(TAG,"No Network connection");
return false;
}
else
{
if(info.isConnected())
{
Log.d(TAG," Network connection available...");
return true;
}
else
{
Log.d(TAG,"no Network connection");
return false;
}
}
}
}
在您的活动课程中
if(NetworkHelper.isInternetAvailable(ActivityName.this))
{
// do some task
}
else
{
Toast.makeText(ActivityName.this,"No Network connection available",1000).show();
}
注意:这会检查网络可用性。您可能会被连接到wifi,但您的wifi可能已连接到网络。