0

我正在尝试在 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;
        }
}
4

3 回答 3

4

将您的活动/片段作为上下文传递。作为一个非常非常简单的例子:

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;
        }
}

附带说明:我不确定在后台获取网络信息是否需要那么多时间。

于 2013-07-06T13:32:07.840 回答
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;
}

对于您对网络所做的一切,请不要忘记许可。

于 2013-07-06T13:34:11.740 回答
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 可能已连接到网络。

于 2013-07-06T13:35:56.007 回答