3
前段時間詢問和回答了此問題link。然而,答案並沒有幫助我。我處於與其他職位的OP類似的位置: 我有一個Asynctask,在該Asynctask中,我建立了與某個網站的連接,但是,大多數情況下,由於互聯網連接遲滯,連接需要一段時間。 我希望用戶能夠隨時停止嘗試連接。停止HttpURLConnection連接
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
}
只要按下按鈕,整個AsyncTask就會在連接完成後纔會被取消。 是否有可能立即停止按鈕按下整個過程? 可以使用默認的httpurlconnection完成嗎?
我嘗試使用斷開連接來觸發異常,而con.getInputStream
正忙,但它無法正常工作。
對於大多數情況,http://android-developers.blogspot.com/2011/09/androids-http-clients.html建議使用Apache的HttpURLConnection。它看起來像我在做代碼一樣的事情,但我沒有問題在任何時候取消AsyncTask,雖然管道可能需要更多時間來關閉在後臺 – Shellum