Java 异步任务中android中的Internet连接检测

Java 异步任务中android中的Internet连接检测,java,android,android-asynctask,Java,Android,Android Asynctask,我有一个类,我用它来检测每个活动中是否有互联网连接。我的问题是,我不想每次都在AsyncTask上循环,因为当我更改上下文时,progressDialog中出现了一个问题。这是我的班级: 公共类互联网连接{ public Boolean isInternetPresent; public ConnectionDetector cd; public Context con; public ProgressDialog progressBar; public InternetConnecti

我有一个类,我用它来检测每个活动中是否有互联网连接。我的问题是,我不想每次都在AsyncTask上循环,因为当我更改上下文时,progressDialog中出现了一个问题。这是我的班级:

公共类互联网连接{

public Boolean isInternetPresent;
public ConnectionDetector cd;   
public Context con;
public ProgressDialog progressBar;

public InternetConnection () {
    this.isInternetPresent = false;
}

public void hay_internet(){

    new Async().execute();

}

public void cambiar_context(Context c) {
    this.con = c;
    this.cd = new ConnectionDetector(c);
    progressBar=new ProgressDialog(con);
    progressBar.setCancelable(false);
    progressBar.setMessage("Buscando conexión de internet");
    progressBar.setTitle("Conectando ...");
    progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressBar.setProgress(0);
}

class Async extends AsyncTask<String, Integer, String> {

     @Override
     protected void onPreExecute() {
         super.onPreExecute();
         isInternetPresent = cd.isConnectingToInternet();

         if(!isInternetPresent) {                
             progressBar.show();
        }
     }

    @Override
    protected String doInBackground(String... params) {
        while(!isInternetPresent){
            isInternetPresent = cd.isConnectingToInternet();
        }
        return null;
    }

    @Override
     protected void onPostExecute(String file_url) {
        progressBar.dismiss();
        new Async().execute(); 
     }
}
公共布尔值是互联存在的;
公共连接检测器cd;
公共环境;
公共进度条;
公共互联网连接(){
this.isInternetPresent=false;
}
公共互联网{
新建异步().execute();
}
公共无效cambiar_上下文(上下文c){
this.con=c;
this.cd=新连接检测器(c);
progressBar=新建ProgressDialog(con);
progressBar.setCancelable(假);
progressBar.setMessage(“互联网公司”);
progressBar.setTitle(“Conectando…”);
progressBar.setProgressStyle(ProgressDialog.STYLE_微调器);
progressBar.setProgress(0);
}
类Async扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
isInternetPresent=cd.isConnectingToInternet();
如果(!isInternetPresent){
progressBar.show();
}
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
而(!isInternetPresent){
isInternetPresent=cd.isConnectingToInternet();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串文件\u url){
progressBar.disclose();
新建异步().execute();
}
}
}


如何修复此循环,以便停止每次调用AsyncTask

使用ConnectionManager检查是否有可用的网络连接。 例如,我在我的应用程序中使用此方法:

    private boolean isNetworkAvailable() {
           ConnectivityManager connectivityManager=(ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
           NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
           return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
该方法是检查是否存在可用的连接。 如果您希望在连接状态发生变化(例如wifi丢失)时收到通知,则应使用广播接收器

 public class NetworkStateChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();
        if (info != null) {
            if (info.isConnected()) {
                // you got a connection! tell your user!
            } 
        } 
    }
  }
您需要在您的清单中注册此广播接收器:

<receiver android:name=".receiver.NetworkStateChangeReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
        </receiver>


看看Android在设备连接发生变化时广播的事件。你应该听他们的。阅读:这是我几天前发现的一个例子:我应该在每项活动中都写这个吗?我想在任何时候检测到我与互联网的连接中断,并通知用户没有连接,在没有互联网之前,他将无法做任何事情。@varjo-真棒的解释伙伴,直截了当+1.谢谢。:)我相信在网络状态改变的任何时间点,广播都会被称为ryt。请纠正我的错误。