Autore Topic: File downloader  (Letto 2576 volte)

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
File downloader
« il: 27 Ottobre 2010, 22:03:47 CEST »
0
Salve, dovrei implementare un file downloader per una mia app per scaricare dei file da internet, ovvero ciò che succede quando clickiamo in un qualsiasi birowser su un link del tipo http://www.anddev.it/nomefile.xyz Qualcuno sa darmi un dritta da dove iniziare?
Grazie

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #1 il: 27 Ottobre 2010, 22:59:41 CEST »
0

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:File downloader
« Risposta #2 il: 28 Ottobre 2010, 09:13:58 CEST »
0
quello va benissimo, solo che ti consiglio di farlo partire in un thread, altrimenti pianti tutto fintantoché non ha finito.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #3 il: 28 Ottobre 2010, 12:04:41 CEST »
0
Grazie per l'info...qualche info in più sul thread  :-P ?
Grazie
« Ultima modifica: 28 Ottobre 2010, 12:06:37 CEST da onire »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:File downloader
« Risposta #4 il: 28 Ottobre 2010, 12:13:34 CEST »
0
Common Tasks and How to Do Them in Android | Android Developers

nel tuo caso quel doSomethingExpensive(); è l'operazione che fa il download

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #5 il: 28 Ottobre 2010, 15:23:34 CEST »
0
Nella documentazione di google ho trovato questo
Codice (Java): [Seleziona]
public class MyActivity extends Activity {

    [ . . . ]
    // Need handler for callbacks to the UI thread
    final Handler mHandler = new Handler();

    // Create runnable for posting
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            updateResultsInUi();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        [ . . . ]
    }

    protected void startLongRunningOperation() {

        // Fire off a thread to do some work that we shouldn't do directly in the UI thread
        Thread t = new Thread() {
            public void run() {
                mResults = doSomethingExpensive();
                mHandler.post(mUpdateResults);
            }
        };
        t.start();
    }

    private void updateResultsInUi() {

        // Back in the UI thread -- update our UI elements based on the data in mResults
        [ . . . ]
    }
}

Ora la classe ImageManager del precedente link, dovrei dovrei richiamarla all'interno di run()?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:File downloader
« Risposta #6 il: 28 Ottobre 2010, 15:50:40 CEST »
0

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #7 il: 28 Ottobre 2010, 16:05:53 CEST »
0
Scusami Ricky`, fai finta che il post precedente non l'abbia scritto, non avevo visto il tuo link e quindi doSomethingExpensive() pensavo si riferisse ad altro. Provo subito e grazie ancora.

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #8 il: 05 Novembre 2010, 19:53:36 CET »
0
Come faccio a calcolarmi la percentuale di avanzamento durante il download?

Codice (Java): [Seleziona]
private void downloader() throws IOException, IOException {
                System.out.println("Inizio il download");
                String url;
                url = "http://sito/file.pdf";
               
                java.io.BufferedInputStream in = new java.io.BufferedInputStream(new
                                java.net.URL(url).openStream());
               
                java.io.FileOutputStream fos = new java.io.FileOutputStream("/sdcard/testplans.pdf");
                java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
                byte data[] = new byte[1024];
               
                while(in.read(data,0,1024)>=0)
                {
                        bout.write(data);
                }
                bout.close();
                in.close();
                System.out.println("Termino il download");
        }

Grazie

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:File downloader
« Risposta #9 il: 05 Novembre 2010, 22:44:06 CET »
0
beh, dovresti poterlo fare se sai a priori la dimensione del file che scarichi..
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #10 il: 07 Novembre 2010, 15:56:48 CET »
0
beh, dovresti poterlo fare se sai a priori la dimensione del file che scarichi..
I vari download manager, ma anche gli stessi browser, come fanno a determinare la dimensione del file che stanno scaricando?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:File downloader
« Risposta #11 il: 08 Novembre 2010, 09:58:01 CET »
0
Non necessariamente si hanno queste informazioni.
Negli header che ti passano quando richiedi un file può esserci o meno quest'informazione.
Infatti non tutti i download manager comunicano la dimensione finale.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #12 il: 08 Novembre 2010, 14:35:24 CET »
0
Ho trovato questo delle 4 classi mi sembra di capire che a ne serve solo Download.java.
Ho creato una su istanza ed ho richiamato il metodo run() in startLongRunningOperation, come da voi suggerito, a funzionare funziona.
La classe mette anche a disposizione il metodo getProgress(), se volessi visualizzare la percentuale di avanzamento, dovrei richiamare il metodo getProgress() in un ciclo while?

Inoltre, secondo voi, se associo i metodi pause e resume a dei pulsanti, le chiamate verranno intercettate anche se il run l'ho dato da startLongRunningOperation?

Grazie

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:File downloader
« Risposta #13 il: 08 Novembre 2010, 14:54:28 CET »
0
no.
devi gestire le cose in maniera asincrona, cioè comunicare alla progress bar le variazioni, attraverso dei messaggi.
Ogni volta che hai una variazione del contenuto scaricato, notifica alla progressbar la nuova situazione.
La progressbar, in ascolto, aggiornerà il proprio stato.

Leggi quì, c'è un esempio al riguardo.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline onire

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Dream G1, Samsung Galaxy S
  • Sistema operativo:
    Windows Xp
Re:File downloader
« Risposta #14 il: 09 Novembre 2010, 14:58:22 CET »
0
7h38ugg3r ti ringrazio per il suggerimento intanto mi si è presentato un altro problema, dato dalla mia poca dimestichezza con il java.
Codice (Java): [Seleziona]
protected void startLongRunningOperation() {

        // Fire off a thread to do some work that we shouldn't do directly in the UI thread
        Thread t = new Thread() {
            public void run() {
                try {
                        URL url = new URL("http://sito/file.pdf");
                        final Download downloader = new Download (url);
                                               
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                mHandler.post(mUpdateResults);
            }
        };
        t.start();
    }

    private void updateResultsInUi() {

        // Back in the UI thread -- update our UI elements based on the data in mResults
                TextView TxtView01 = (TextView) findViewById(R.id.TextView01);
                TxtView01.setText(Float.toString(downloader.getProgress()););
               
    }

downloader.getProgress() non è definito all'interno di updateResultsInUi, questo problema si presenterebbe anche se volessi utilizzare la status bar.
Immagino sia una cavolata, ma non so come risolverla.
Grazie