Autore Topic: ProgressBar non si aggiorna  (Letto 387 volte)

Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
ProgressBar non si aggiorna
« il: 02 Marzo 2015, 18:02:29 CET »
0
Ciao, stavo cercando di implementare nel tutorial presente qua sul sito(Upload di file su serverFTP) una progressbar per visionare lo status dell'upload ma non si aggiorna, passa direttamente da 0 a 100 quando l'upload è terminato. Questo è il mio codice:
Codice (Java): [Seleziona]
class Upload extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        FTPClient client= new FTPClient();
        try {
                InetAddress indirizzo = InetAddress.getByName("myurl.com");
                client.connect(indirizzo);
                //risposta.setText(client.getReplyString());
                //aperta la connessione al server procedo al login
                boolean loggato=client.login("username", "password");
                //if(loggato==true) risposta.append(" ....login effettuato");
                //else risposta.append("...login fallito");
                client.enterLocalPassiveMode();
                //apro il file contenuto nel path /sdcard come stream
                client.setFileType(FTP.BINARY_FILE_TYPE); // imposto il tipo di dati, da modificare a seconda dell'utilità
                File sdcardDir = Environment.getExternalStorageDirectory(); //dato che il mio file era sulla sd prendo il riferimento alla memoria       esterna
                File file = new File(sdcardDir,"fotografia.jpg"); //prendo il riferimento al file salvato sulla sd
                FileInputStream fis = new FileInputStream(file);//creo uno stream in input a partire dal mio file
                long lengthofFile = file.length();
                //risposta.append("...path file: " + file.getPath()); //questa istruzione la usavo per test, la lascio casomai dovesse servire, stampa semplicemente il path del file che voglio uploadare

                boolean upload_ok=client.storeFile("fotografia.jpg", fis);
                int progress = 0;
                int bytesRead = 0;
                byte buf[] = new byte[1024];
                BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream(file));
                while ((bytesRead = bufInput.read(buf)) != -1) {
                  progress += bytesRead;
                  publishProgress("" + (int) ((progress * 100) / lengthofFile));
                }
                fis.close();//procedo alla chiusura dello stream, infatti storeFile non chiude fis


                } catch (SocketException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        return null;
    }
    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        dismissDialog(DIALOG_UPLOAD_PROGRESS);
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        showDialog(DIALOG_UPLOAD_PROGRESS);
    }

    @Override
    protected void onProgressUpdate(String... values) {
        // TODO Auto-generated method stub
        //Log.d("ANDRO_ASYNC", values[0]);
        progressDialog.setProgress(Integer.parseInt(values[0]));
    }

}
Dove ho sbagliato?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:ProgressBar non si aggiorna
« Risposta #1 il: 02 Marzo 2015, 20:37:00 CET »
0
A occhio non vedo errori. Unica cosa che mi viene in mente è che, se l'operazione dura molto poco (esempio un paio di secondi massimo), tutti i publishProgress potrebbero accumularsi nella queue dei messaggi e li vedi esegui tutti in una volta, quasi istantaneamente.

Dovresti mettere un Log.d() che stampa nel logcat i vari publishprogress, così vedi anche i timestamp.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline scemodicecosa

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
Re:ProgressBar non si aggiorna
« Risposta #2 il: 02 Marzo 2015, 22:01:22 CET »
0
I file con cui ho fatto i test erano da 300kb uno e 6mb l'altro, quindi non penso che sia un problema di accumularsi di messaggi. Avevo già provato a mettere un log dei publishprogress e dei progress e in entrambi i casi solo quando il file era stato caricato allora apparivano tutti insieme nella log, come se i byte del file venissero letti solo dopo averlo caricato. Non so piu dove sbattere la testa  :-(

Il tutto avviene in decimo di secondo da 21:57:35.809 a 21:57:35.989
« Ultima modifica: 02 Marzo 2015, 22:03:37 CET da scemodicecosa »