en fait j'ai un problème dans mon programme.
Je dois normalement télécharger des fichiers à partir d'un serveur FTP, et j'ai un bouton pour le faire lorsque je clique sur Je dois télécharger le fichier.
le problème est que lorsque je clique plusieurs fois. la tâche ne s'exécutera pas, car je n'arrive pas à tuer asyntask. ici, je mets un exemple simple:comment tuer une tâche asynchrone?
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;
}
}
}
ce que je dois ajouter dans mon code pour corriger mon bug.
je vous remercie beaucoup pour votre aide
merci beaucoup pour votre aide, je trouve la solution, le problème était dans la Methode de retrivefile, je l'ai trouvé la solution dans cette discussion enter link description here
Jetez un oeil à [CETTE REPONSE] (http://stackoverflow.com/a/10882600/1289716) – MAC