簡體   English   中英

發送數據時如何取消AsyncTask

[英]how cancel AsyncTask when send data

它的代碼用於將數據發送到服務器,我想在單擊后退按鈕時取消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();
        }


    }



}`

它是我所有用於發送數據和按按鈕發送數據的代碼

謝謝

new sendcomment().cancel(true);

您嘗試取消新任務。

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

PS不要使用AsyncTask。

嘗試這個

// Initialize and execute
sendcomment mySendCommentTask = new sendcomment();    
mySendCommentTask.execute();

// and when you need to cancel
mySendCommentTask.cancel(true);

取消AsyncTask可能很痛苦-

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

要進行測試,請知道,如果AsyncTask成功取消, onPostExecute()將不會運行,而onCancelled()會運行,因此在onCancelled()放置一些內容,以便您可以知道它是否被調用,這是否意味着AsyncTask被取消。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM