Java 如何设置android AsyncTask中等待internet连接的时间限制?

Java 如何设置android AsyncTask中等待internet连接的时间限制?,java,android-asynctask,progressdialog,android-internet,Java,Android Asynctask,Progressdialog,Android Internet,我已使用AsyncTask连接Internet。在onPreExecute()上可以显示一个进度对话框,我检查该手机是否在线,如果是,则意味着它将执行http连接代码,并在onPostExecute()上关闭进度对话框,其工作正常 但是如果在请求时网络连接可用,并且在得到响应之前连接关闭,我会遇到问题。表示始终显示进度对话框 现在我想解决这个问题,如果interconnect disconnect before get Response(在得到响应之前断开连接)意味着它会提醒我没有interne

我已使用AsyncTask连接Internet。在onPreExecute()上可以显示一个进度对话框,我检查该手机是否在线,如果是,则意味着它将执行http连接代码,并在onPostExecute()上关闭进度对话框,其工作正常

但是如果在请求时网络连接可用,并且在得到响应之前连接关闭,我会遇到问题。
表示始终显示进度对话框

现在我想解决这个问题,如果interconnect disconnect before get Response(在得到响应之前断开连接)意味着它会提醒我没有internet连接并关闭进度对话框(可能将加载时间限制设置为30秒)

下面是我的代码

有人能帮忙吗

   public class SubjectTask extends AsyncTask<Void, Void, Integer> {

    @Override
    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(Login.this, "Loading",
                "Please wait...");
        //checkConnection();

    }

    @Override
    protected Integer doInBackground(Void... arg0) {

        if (isOnline()) {  //using ConnectivityManager And Network Info

            try {

                //Http Request connections

            } catch (Exception e) {
                e.printStackTrace();
            }



            return 1;
        } else {

            alert("Check your internet connection");
            return 0;
        }

    }

    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    }

}
公共类SubjectTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
progressDialog=progressDialog.show(Login.this,“加载”,
“请稍等……”;
//检查连接();
}
@凌驾
受保护的整数doInBackground(无效…arg0){
如果(isOnline()){//使用ConnectionManager和网络信息
试一试{
//Http请求连接
}捕获(例外e){
e、 printStackTrace();
}
返回1;
}否则{
警报(“检查您的互联网连接”);
返回0;
}
}
受保护的void onPostExecute(整数结果){
super.onPostExecute(结果);
if(progressDialog.isShowing()){
progressDialog.disclose();
}
}
}

您可以使用广播接收器获取网络连接或断开的事件。在doInbackground方法中注册此接收器,并在onPostExecute方法中注销它

 broadcastReceiver = new BroadcastReceiver() {

                    @Override
                    public void onReceive(Context context, Intent intent) {

                        ConnectivityManager connectivity = (ConnectivityManager) context
                                .getSystemService(Context.CONNECTIVITY_SERVICE);


                            NetworkInfo info = connectivity.getActiveNetworkInfo();
                            //Play with the info about current network state
                             if(info.getState()== NetworkInfo.State.DISCONNECTED) {
                               // hide loader and show alert here
}

                        }

                    }
                };

                intentFilter = new IntentFilter();
                intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
                registerReceiver(broadcastReceiver, intentFilter); 

如果在http请求之前或期间关闭连接,将抛出
IOException
。捕获该异常并关闭对话框,并将此事件通知用户

  if (isOnline()) {  //using ConnectivityManager And Network Info

        try {

            //Http Request connections

        } catch (IOException e) {
            e.printStackTrace();
            // Do the error handling here

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } 
  }

我不知道您是否真的需要onPostExecute()的返回值。如果是,则需要使逻辑意识到可能发生异常。

我感谢Steve Benettand Bhawna Raheja, 很抱歉,回复太晚了, 我只是通过HttpRequest.Timeout设置超时来解决这个错误。 我不知道我怎么忘了定时间

再次感谢你们两位