IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Transférer une image sur un serveur FTP


Sujet :

API standards et tierces Android

  1. #21
    Membre régulier
    Homme Profil pro
    Développeur Android
    Inscrit en
    Avril 2015
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Avril 2015
    Messages : 63
    Points : 102
    Points
    102
    Par défaut
    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.

  2. #22
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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 :

    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
            ......
        }
    Deux questions à ce sujet :

    1 -Comment récupérer la ProgressBarre du context dans l'AsyncTask ?
    Elle est déclarée dans la mainActivity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressBar barre = findViewById(R.id.barre);
    Sauf qu'ensuite "barre" n'est plus connue.

    J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public UploadFTP(Context applicationContext)
        {
           this.context = applicationContext;
        }
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    context.barre.setProgress(values[0]);
    Mais barre est inconnue..


    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

  3. #23
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    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
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #24
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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;

  5. #25
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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);

  6. #26
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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 :

    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");
        }
    Le TOAST fonctionne seul, mais il ne faut pas le louper...

    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,

  7. #27
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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 :


    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();
    Mais j'ai un message d'erreur sur la ligne :
    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 ?

  8. #28
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    C'est effectivement un problème de bibliothèque ou d'import manquant.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #29
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Tu saurais laquelle ?

  10. #30
    Membre régulier
    Homme Profil pro
    Développeur Android
    Inscrit en
    Avril 2015
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Avril 2015
    Messages : 63
    Points : 102
    Points
    102
    Par défaut
    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.

  11. #31
    Membre à l'essai
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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'

  12. #32
    Candidat au Club
    Homme Profil pro
    développeur junior
    Inscrit en
    Juin 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur junior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    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

Discussions similaires

  1. requête d'une image sur un serveur ftp
    Par mimi51340 dans le forum Entrée/Sortie
    Réponses: 16
    Dernier message: 03/03/2008, 21h12
  2. uploader une image sur le serveur
    Par kespy13 dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 20h01
  3. [Image]Stockage d'une image sur un serveur
    Par zoby43 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/03/2006, 11h42
  4. Enregistrement d'une image sur le serveur
    Par MHI dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2005, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo