Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 停止连接的HttpUrl连接_Android_Android Asynctask_Httpurlconnection_Cancellation - Fatal编程技术网

Android 停止连接的HttpUrl连接

Android 停止连接的HttpUrl连接,android,android-asynctask,httpurlconnection,cancellation,Android,Android Asynctask,Httpurlconnection,Cancellation,这个问题是不久前提出并回答的。然而,答案对我没有帮助。我的职位与另一个职位的OP差不多: 我有一个异步任务,在该任务中,我连接到某个网站,但是,由于Internet连接滞后,大部分时间连接都需要一些时间。 我希望用户能够随时停止尝试连接 public class DownloadWebHtml extends AsyncTask<String, Void, Map<String,ArrayList<ArrayList<String>>>> {

这个问题是不久前提出并回答的。然而,答案对我没有帮助。我的职位与另一个职位的OP差不多: 我有一个异步任务,在该任务中,我连接到某个网站,但是,由于Internet连接滞后,大部分时间连接都需要一些时间。 我希望用户能够随时停止尝试连接

public class DownloadWebHtml extends AsyncTask<String, Void, Map<String,ArrayList<ArrayList<String>>>> {        
        HttpURLConnection con = null;

        @Override
        protected void onPreExecute(){
            Button but = (Button) findViewById(301);
            but.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    cancel(true);
                    con.disconnect();
                }
            });
        }

        @Override
        protected Map<String, ArrayList<ArrayList<String>>> doInBackground(String... urlcodes) {
            //stuff
            BufferedReader in = null;
            try {
                URL url = new URL("some url");
                con = (HttpURLConnection) url.openConnection();
                in = new BufferedReader(new InputStreamReader(con.getInputStream(),Charset.forName("ISO-8859-1")));
                String line = "";
                while ((line = in.readLine()) != null && !isCancelled()) {
                    html.add(line);
                }
                in.close();
            } catch (MalformedURLException e) {
                return null;
            } catch (IOException e) {
                return null;
            } finally {
                con.disconnect();
                 if (in != null) {
                     try {
                         in.close();
                     } catch (IOException e) {
                         Log.d("gettxt", e.getMessage());
                     }
                 }
            }

            if(!html.isEmpty()) {
                return //stuff;
            }
            return null;

        }

        @Override
        protected void onCancelled(){
            //cancellation
        }


    //onpostexecute doing stuff
}
公共类下载WebHTML扩展异步任务{
HttpURLConnection con=null;
@凌驾
受保护的void onPreExecute(){
按钮but=(按钮)findViewById(301);
但是.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
取消(真);
con.disconnect();
}
});
}
@凌驾
受保护的地图doInBackground(字符串…URL代码){
//东西
BufferedReader in=null;
试一试{
URL=新URL(“某些URL”);
con=(HttpURLConnection)url.openConnection();
in=新的BufferedReader(新的InputStreamReader(con.getInputStream(),Charset.forName(“ISO-8859-1”));
字符串行=”;
而((line=in.readLine())!=null&&!isCancelled()){
html.add(行);
}
in.close();
}捕获(格式错误){
返回null;
}捕获(IOE异常){
返回null;
}最后{
con.disconnect();
if(in!=null){
试一试{
in.close();
}捕获(IOE异常){
Log.d(“getxt”,例如getMessage());
}
}
}
如果(!html.isEmpty()){
归还//物品;
}
返回null;
}
@凌驾
受保护的void onCancelled(){
//取消
}
//做一些事情
}
只要按下按钮,整个异步任务都将在连接完成后取消。 按下按钮是否可以立即停止整个过程? 可以使用默认的httpurlconnection来完成吗


con.getInputStream
忙时,我尝试使用断开连接触发异常,但失败。

我建议切换到Apache的。它很有魅力,并且有一个线程安全的
abort
方法,正如。

对于大多数情况,建议在Apache上使用HttpURLConnection。看起来您在代码中执行的操作与我相同,但是我在任何时候都可以取消AsyncTask,尽管在后台关闭管道可能需要更多的时间