2013-06-03 3 views
0

На самом деле у меня проблема в моей программе.
Обычно мне приходится загружать файлы с FTP-сервера, и у меня есть кнопка для этого, когда я нажимаю, я должен загрузить файл.
проблема в том, что когда я нажимаю несколько раз. задача не будет выполняться, потому что я не могу убить asyntask. здесь я поставил простой пример:Как убить асинхронную задачу?

public class MainActivity extends Activity { 


Connexion conx=null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button bt= (Button) findViewById(R.id.button1); 
    bt.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (conx!=null){ 
       Log.i("voila", "we are here 1"); 
       conx.cancel(true); 
       conx=new Connexion(); 
       conx.execute("73383_20130426_Tessenderlo_VBR_3.pdf"); 

      }else { 
      conx=new Connexion(); 
      conx.execute("73383_20130426_Tessenderlo_VBR_3.pdf");} 

     } 
    }); 
} 

class Connexion extends AsyncTask<String, String, String> { 
    FTPClient mFTPClient; 
    @Override 
    protected String doInBackground(String... params) { 
     Log.i("voila", "we are here 2"); 
     String chaine = params[0]; 
      try { 
        mFTPClient = new FTPClient(); 
        mFTPClient.connect("site", 21); 
        Log.i("voila", "we are here 4"); 
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) { 
         boolean status = mFTPClient.login("user", "pass"); 
         mFTPClient.enterLocalPassiveMode(); 
         ftpDownload("/fromCIS/" +chaine , 
           Environment.getExternalStorageDirectory() 
             + "/Fromcis/" + chaine); 
          mFTPClient.logout(); 
          mFTPClient.disconnect(); 

        } 
       } catch (Exception e) { 

       } 
      return "zaki";  
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     Log.i("voila", "we are here onpost"); 
     conx=null; 

    } 

    public boolean ftpDownload(String srcFilePath, String desFilePath) { 
     boolean status = false; 
     try { 
      FileOutputStream desFileStream = new FileOutputStream(
        desFilePath); 
      ; 
      status = mFTPClient.retrieveFile(srcFilePath, desFileStream); 
      desFileStream.close(); 

      return status; 
     } catch (Exception e) { 
      Log.d(e.getCause() + "", "download failed"); 
     } 

     return status; 
    } 
} 
} 

, что я должен добавить в моем коде, чтобы исправить свою ошибку.
большое спасибо за вашу помощь

Большое спасибо за вашу помощь я нашел решение, проблема была в retrivefile Methode, я нашел решение в этой дискуссии enter link description here

+1

Посмотрите на [ЭТОТ ОТВЕТ] (http://stackoverflow.com/a/10882600/1289716) – MAC

ответ

1

Вы можете использовать task.cancel(true); но обычно это работает, если у вас есть цикл в вашем doInBackground() и проверить значение isCancelled в нем. Но в вашем случае нет петли.

+0

и что я должен делать в своем случае? –

+0

@zakzak Почему вы нажимаете несколько раз? – hasanghaforian

+0

, чтобы загрузить другой файл с сервера –

0

task.cancel(true);, чтобы остановить AsyncTask

+1

Это только останавливает его. Это не убивает задачу. –

+0

И еще несколько вещей, которые следует учитывать при отмене «AsyncTask». См. Ответ от @hasanghaforian: http://developer.android.com/reference/android/os/AsyncTask.html#cancel%28boolean%29 –

1

, чтобы Stom вам надо сделать:

первого из вашего основного потока:

conx.cancel(true); 

и второе в вашем doInBackgroundMethod (String Params ..)

if(this.isCancelled()){ 
return "interrupt" 
} 
0

Вместо:

if (conx!=null){ 
     Log.i("voila", "we are here 1"); 
     conx.cancel(true); 
     conx=new Connexion(); 
     conx.execute("73383_20130426_Tessenderlo_VBR_3.pdf"); 
}else { 
     conx=new Connexion(); 
     conx.execute("73383_20130426_Tessenderlo_VBR_3.pdf");} 

Вобще:

// Kill any remaining tasks 
conx = null; 
// Start the new task 
conx=new Connexion(); 
conx.execute("73383_20130426_Tessenderlo_VBR_3.pdf"); 
+0

извините, но я не убил асинтез, а в нескольких кликах у меня нет ответа от программы –

Смежные вопросы