0

Implemnting Asynctask in my Aplication, But my AsyncTask still running when cancelled and not stop. so how to solve it ? this my code

when I running it

myTask = new ImageUploadTask();
myTask.execute();

this Asyntask

class ImageUploadTask extends AsyncTask <Void, Void, String>{
            String err=null;
            @Override
            protected String doInBackground(Void... unsued) {
                 for(int i = 0; i <= 30000; i++) {
                        if(myTask.isCancelled()) break;
                    }

                try {

                    ByteArrayOutputStream bos_1 = new ByteArrayOutputStream();
                    bitmap_photo_1.compress(CompressFormat.JPEG, 100, bos_1);
                    byte[] data_1 = bos_1.toByteArray();

                    HttpParams httpParameters = new BasicHttpParams();
                    // Set the timeout in milliseconds until a connection is established.
                    int timeoutConnection = 30*1000;
                    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
                    // Set the default socket timeout (SO_TIMEOUT) 
                    // in milliseconds which is the timeout for waiting for data.
                    int timeoutSocket = 30*1000;
                    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

                    HttpClient httpClient = new DefaultHttpClient(httpParameters);              
                    HttpPost postRequest = new HttpPost(Variabel.URL_CONFIRM_ACTION);               
                    ByteArrayBody bab_1 = new ByteArrayBody(data_1,var_photo_1);                
                    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

                    reqEntity.addPart(Variabel.KEY_USER_ID, new StringBody(Variabel.user_id.toString().trim()));
                    reqEntity.addPart(Variabel.KEY_PHOTO_1, bab_1);
                    reqEntity.addPart(Variabel.KEY_PHOTO_1_TIME, new StringBody(var_photo_1_time.toString().trim()));
                    reqEntity.addPart(Variabel.KEY_PHOTO_1_LOCATION_LONGITUDE, new StringBody(var_photo_1_location_longitude.toString().trim()));
                    reqEntity.addPart(Variabel.KEY_PHOTO_1_LOCATION_LATITUDE, new StringBody(var_photo_1_location_latitude.toString().trim()));

                    postRequest.setEntity(reqEntity);
                    HttpResponse response = httpClient.execute(postRequest);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),"UTF-8"));
                    String sResponse;
                    StringBuilder s = new StringBuilder();

                    while ((sResponse = reader.readLine()) != null) {
                        s = s.append(sResponse);
                    }

                    return s.toString().trim();

                } catch (Exception e) {

                    err="error"+e.getMessage();
                    Log.e(e.getClass().getName(), e.getMessage());

                    return e.getMessage();
                }       

            }

Canceling code

myTask.cancel(true);  

so how to stop full ? sorry for my english

Amay Diam
  • 2,501
  • 7
  • 32
  • 55

1 Answers1

0

You can't just kill asynctask immediately. In order it to stop you should first cancel it:

task.cancel(true);

and than in asynctask's doInBackground() method check if it's already cancelled:

isCancelled()

and if it is, stop executing it manually.

Just check isCancelled() once in a while:

 protected Object doInBackground(Object... x) {
    while (/* condition */) {
      // work...
      if (isCancelled()) break;
    }
    return null;
 }
Akash Moradiya
  • 3,299
  • 1
  • 12
  • 19