gpt4 book ai didi

java - 无法取消异步任务执行

转载 作者:行者123 更新时间:2023-12-01 12:50:24 26 4
gpt4 key购买 nike

当用户连续单击调用异步任务的按钮时,出现异常。那么有什么方法可以在第二次按下按钮时取消第一个异步任务的执行。我希望你能理解这个问题。

下面给出了我使用的代码。

使用以下代码单击按钮

        GetData obj= new GetData();
String urls="http://pathramonline.com/?cat=46";
obj.execute(urls);

我的异步任务

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

@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub

BufferedReader reader =null;
String data =null;

try{

HttpClient client = new DefaultHttpClient();
URI uri=new URI(params[0]);

HttpGet get =new HttpGet(uri);

HttpResponse response= client.execute(get);

InputStream stream=response.getEntity().getContent();

reader = new BufferedReader(new InputStreamReader(stream));

StringBuffer buffer =new StringBuffer("");
String line="";
String newLine= System.getProperty("line.separator");

while((line=reader.readLine())!=null){
buffer.append(line+newLine);
}
reader.close();
data = buffer.toString();


return data;

}
catch(URISyntaxException e){
e.printStackTrace();
}
catch(ClientProtocolException f){
f.printStackTrace();
}
catch(IOException g){
g.printStackTrace();
}
catch(Exception e)
{
//
}
finally{
if(reader!=null){
try{
reader.close();
}
catch(Exception e){

}
}
}

return null;
}
@Override
protected void onCancelled() {


}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//TextView t3=(TextView)findViewById(R.id.textView3);
if(result==null)
{
Intent home = new Intent(MainActivity.this,NoConnection.class);
MainActivity.this.startActivity(home);
MainActivity.this.finish();
}

//Some actions
}
}

最佳答案

我建议使用另一种方法,而不是取消异步任务。在 onPreExecute() 方法中禁用按钮单击

button.setEnabled(false);

并在 onPostExecute() 方法中启用返回按钮

button.setEnabled(true);

如果您明确想知道按钮被禁用,那么在执行异步任务时,您可以将按钮的背景颜色更改为另一种颜色或背景,以便用户知道某些功能正在执行,并且他可以将按钮的背景颜色更改为其他颜色或背景。需要等待..

另一种方法是

new AsyncTask<Void, Void, Void>() {

String result = "";
ProgressDialog progressDialog = null;

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Loading , Please wait...");
progressDialog.setIndeterminate(true);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
super.onPreExecute();
}

@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
String url = "your link comes here"



JSONObject jsonObject = jpass.getJSONFromUrl(url);

try {
//do your work here

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

@Override
protected void onPostExecute(Void a) {
// TODO Auto-generated method stub
progressDialog.dismiss();

if (result.equals("success")) {
//on success do some work here
}
else
{
//on failure do some work here
}
super.onPostExecute(a);
}

}.execute();

关于java - 无法取消异步任务执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24260937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com