Comme l'a dit grunk, a partir du moment ou ça marche en wifi malgré le VPN tu ne devrais avoir aucun soucis à faire fonctinner cela en 4G avec le VPN actif.
Comme l'a dit grunk, a partir du moment ou ça marche en wifi malgré le VPN tu ne devrais avoir aucun soucis à faire fonctinner cela en 4G avec le VPN actif.
Re bonjour,
Mon appli tourne sans problème en 4g et en wifi.
Comme j'upload des fichier de 4-5 mo à partir du téléphone j'aimerais mettre en place un système qui me permet de déterminer quand la tache est terminée.
Pour cela j'utilise :
- onPreExecute : Pour afficher toast indiquant le début du transfert.
- onPostExecute : Pour indiquer quand le traitement est terminé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @Override protected void onPreExecute() { super.onPreExecute(); Toast.makeText(context, "Début transfert", Toast.LENGTH_LONG).show(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Override protected void onPostExecute(String result) { Toast.makeText(context, "Upload OK ", Toast.LENGTH_LONG).show(); }
Ceci fonctionne.
J'aimerais aller un cran plus loin et savoir s'il est possible d'afficher l'avancement de l'upload via une barre de progression ?
Je pensais utiliser onProgressUpdate :
Deux questions à ce sujet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @Override protected void onProgressUpdate(Integer... values){ super.onProgressUpdate(values); // Mise à jour de la ProgressBar ...... }
1 -Comment récupérer la ProgressBarre du context dans l'AsyncTask ?
Elle est déclarée dans la mainActivity :
Sauf qu'ensuite "barre" n'est plus connue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ProgressBar barre = findViewById(R.id.barre);
J'ai essayé avec :
puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public UploadFTP(Context applicationContext) { this.context = applicationContext; }Mais barre est inconnue..
Code : Sélectionner tout - Visualiser dans une fenêtre à part context.barre.setProgress(values[0]);
2 -Avec quoi alimenter le publishProgress dans le doInBackground ?
L'avancement des octets transférés ? Comment récupérer cette donnée ?
Merci d'avance,
Evo
FTPClient fonctionne avec un listner pour gérer la progression : CopyStreamListener
Il faut donc créer un listener et l'associer à ton client FTP via setCopyStreamListener() et gérer ta barre de progression dans ce listener.
Un exemple de mise en place ici
Je suis vraiment une quiche..
J'arrive pas du tout à avancer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 try { FileInputStream img = new FileInputStream(new File(params[0])); mFTPClient.storeFile(params[1], img); CopyStreamAdapter streamListener = new CopyStreamAdapter() { @Override public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) { int percent = (int)(totalBytesTransferred*100/img.length()); publishProgress(percent); } }); mFTPClient.setCopyStreamListener(streamListener);
J'ai ajouté ceci dans le DoinBackgroung.
Cependant CopyStremAdapter n'est pas reconnu: "cannot resolve symbol..."
J'ai ajouté dans le package :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 import org.apache.commons.net.util.ListenerList; import java.util.EventListener;
J'ai rajouté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 import org.apache.commons.net.io.*; import org.apache.commons.net.ftp.*;
Reste setCopyStreamListener qui n'est pas reconnu:
Code : Sélectionner tout - Visualiser dans une fenêtre à part mFTPClient.setCopyStreamListener(streamListener);
Je suis toujours bloqué alors je change mon fusil d'épaule.
Plutôt que de faire joujou avec une barre de progression, je souhaite tout simplement afficher dans un TexView un "OK" pour annoncer que l'upload est terminé.
Actuellement je fait :
Le TOAST fonctionne seul, mais il ne faut pas le louper...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Override protected void onPostExecute(String result) { Toast.makeText(context, "Upload OK ", Toast.LENGTH_LONG).show(); activity.setContentView(R.layout.activity_main); TextView res = this.activity.findViewById(R.id.res); res.setText("Transfert OK"); }
J'obtiens une erreur :
FATAL EXCEPTION: main
Process: com.evo.evoftpupload, PID: 32492
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.setContentView(int)' on a null object reference
Du coup j'aimerais savoir si il est possible d'utiliser findViewById dans une une AsyncTask qui n'appartient pas à la classe principale ?
Merci d'vaance,
Bon j'ai réussi à trouver.
Ça fonctionne bien.
Du coup comme il me reste encore un peu de temps je reviens sur la barre de progression.
J'écris :
Mais j'ai un message d'erreur sur la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 FileInputStream img = new FileInputStream(new File(params[0])); mFTPClient.storeFile(params[1], img); CopyStreamAdapter streamListener = new CopyStreamAdapter() { @Override public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) { int percent = (int) (totalBytesTransferred * 100 / mFTPClient.getBufferSize()); publishProgress(percent); } }; mFTPClient.setCopyStreamListener(streamListener); Log.d(TAG, "fichier stocké"); img.close(); mFTPClient.logout(); mFTPClient.disconnect();
mFTPClient.setCopyStreamListener(streamListener);
Message : "Cannot resolve method 'setCopyStreamListener(org.apache.commons.net.io.CopyStreamAdapter)'
Je comprends pas pourquoi...
C'est une histoire de bibliothèque ?
C'est effectivement un problème de bibliothèque ou d'import manquant.
Ben c'est commons.net d'apache.
Ajoute la ligne suivante dans les dépendances gradle de ton fichier build.gradle du module :
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part implementation 'commons-net:commons-net:3.6'
Normalement ça devrait marcher.
Salut,
Merci pour la réponse, mais ça ne fonctionne pas.
Même erreur sur la ligne avec dans le build.gradle(Module: app)
Code : Sélectionner tout - Visualiser dans une fenêtre à part implementation 'commons-net:commons-net:3.6'
Bonjour, désolé de déterrer la discussion.
j'essaie de faire comme toi mais moi je dois envoyer un simple fichier txt sur un ftp.
problème, je sais pas comment remplacer ton code pour l'adapter au miens...
pourtant tout est bien expliqué.
Là où je galère c'est la gestion du système, des répertoires etc.
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager