如何执行 AsyncTask 以检查互联网连接

use*_*008 2 android android-asynctask

我有以下代码,我想要做的是以编程方式检查是否有互联网连接。
由于我收到NetworkOnMainThreadException,并被建议使用 AsyncTask。
我想执行网络操作hasActiveInternetConnection(Context context)并在连接到网络时返回 true ,否则返回 false 。
如何使用 AsyncTask 执行此操作?

 public class NetworkUtil extends AsyncTask<String, Void, String>{
        Context context;

        public NetworkUtil(Context context){
            this.context = context;
         }

    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... arg0) {
        if (new CheckNetwork(context).isNetworkAvailable()) 
        {
             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();
                 boolean url= (urlc.getResponseCode() == 200);
                 String str = String.valueOf(url);
                 return str;
             } catch (IOException e) {

             }
         } 


            // your get/post related code..like HttpPost = new HttpPost(url);
         else {
            Toast.makeText(context, "no internet!", Toast.LENGTH_SHORT).show();
        }


        return null;
    }
    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (dialog.isShowing()) {
            dialog.dismiss();
        }
    }
    }
Run Code Online (Sandbox Code Playgroud)

Vis*_*dey 5

使用这个类来检查互联网连接...

public class CheckNetwork {
private Context context;

public CheckNetwork(Context context) {
    this.context = context;
}

public boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)

}

然后.....

将此 ASynTask 用于 httppost。

public class NetworkUtil extends AsyncTask<String, Void, String> {

private ProgressDialog dialog;

@Override
protected void onPreExecute() {
    dialog = new ProgressDialog(YourActivity.this);
    dialog.setMessage("Loading...");
    dialog.setCancelable(false);
    dialog.show();
    super.onPreExecute();
}

@Override
protected String doInBackground(String... arg0) {
    if (new CheckNetwork(YourActivity.this).isNetworkAvailable()) {
        // your get/post related code..like HttpPost = new HttpPost(url);
    } else {
        // No Internet 
        // Toast.makeText(YourActivity.this, "no internet!", Toast.LENGTH_SHORT).show();
    }
    return null;
}
@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    if (dialog.isShowing()) {
        dialog.dismiss();
    }
}
Run Code Online (Sandbox Code Playgroud)