如何在发送数据时取消AsyncTask



这是我的代码发送数据到服务器,我想取消Asynctask时点击后退按钮,我尝试了很多方法,但我不能取消Asynctask怎么做??

public class sendcomment extends AsyncTask{

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();
    pr = ProgressDialog.show(sendques.this, null, null, true);
    pr.setContentView(R.layout.progressdialog);
    pr.getWindow().setBackgroundDrawable(newColorDrawable(android.graphics.Color.TRANSPARENT));
    pr.setCancelable(true);
    pr.show();
    pr.setOnCancelListener(new ProgressDialog.OnCancelListener() {         
        @Override
        public void onCancel(DialogInterface arg0) {

            pr.cancel();

            new sendcomment().cancel(true);
        }
    });
}
    @Override
    protected Object doInBackground(Object... arg0) {
        // TODO Auto-generated method stub

        try{
            String data=URLEncoder.encode("name","utf8")+"="+URLEncoder.encode(ename.getText().toString()+"","utf8");
            data+="&"+URLEncoder.encode("email","utf8")+"="+URLEncoder.encode(eemail.getText().toString()+"","utf8");
            data+="&"+URLEncoder.encode("phone","utf8")+"="+URLEncoder.encode(ephone.getText().toString()+"","utf8");
            data+="&"+URLEncoder.encode("question","utf8")+"="+URLEncoder.encode(equestion.getText().toString()+"","utf8");
                        data+="&"+URLEncoder.encode("serial","utf8")+"="+URLEncoder.encode(phoneserialnumber+"","utf8");
            data+="&"+URLEncoder.encode("model","utf8")+"="+URLEncoder.encode(devicemodel+"","utf8");
            data+="&"+URLEncoder.encode("androidv","utf8")+"="+URLEncoder.encode(androidOS+"","utf8");

            URL link=new URL(Main.url+"getquestion.php");
            URLConnection connect=link.openConnection();

            //send data
            connect.setDoOutput(true);
            OutputStreamWriter wr=new OutputStreamWriter(connect.getOutputStream());
            wr.write(data);
            wr.flush();
            BufferedReader reader=new BufferedReader(new InputStreamReader(connect.getInputStream()));
            StringBuilder sb=new StringBuilder();
            String line=null;
            while((line=reader.readLine()) != null){
                sb.append(line);
            }
            res=sb.toString();
        }catch(Exception e){
            res=e.toString();
        }
        return "";
    }
    @Override
    protected void onPostExecute(Object result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        if(res.equals("ok")){

            Builder alert = new AlertDialog.Builder(sendques.this);
            alert.setTitle("your code: "+pnom+"");
            alert.setMessage("your comment recieved!");
            alert.setPositiveButton("ok",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // Finish activity
                            finish();
                        }
                    });;
            alert.show(); 

            pr.cancel();
        }

    }

}`

这是我所有的代码发送数据和数据发送按下按钮

Thank you

取消AsyncTask可能会很痛苦-

sendcomment.this.cancel(true);代替new sendcomment().cancel(true);

要测试它,知道如果AsyncTask成功取消,onPostExecute()不会运行,但onCancelled()会运行,所以在onCancelled()中放一些东西,这样你就可以知道它是否被调用了,如果是,这意味着AsyncTask被取消了

new sendcomment().cancel(true);

尝试取消新任务。

mySendCommentTask = new sendcomment();
mySendCommentTask.cancel(true);

p。不要使用AsyncTask.

试试这个

// Initialize and execute
sendcomment mySendCommentTask = new sendcomment();    
mySendCommentTask.execute();
// and when you need to cancel
mySendCommentTask.cancel(true);

最新更新