Domanda

Nel mio programma Android, ho qualche codice che scarica un file. Questo funziona bene, ma dal momento che su un telefono cellulare, si può essere scollegato in qualsiasi momento, ho bisogno di cambiare lo faccio ricollega e riprende il download quando si è a metà strada e qualcuno chiama / a perdere la ricezione delle / etc. Non riesco a capire come rilevare l'InputStream ha smesso di funzionare. Vedere il codice qui sotto:

InputStream in = c.getInputStream();

    byte[] buffer = new byte[8024];
    int len1 = 0;

    while ( (len1 = in.read(buffer)) > 0 ) {
        Log("-"+len1+"- Downloaded.");
        f.write(buffer,0, len1);
        Thread.sleep(50);
    }

Quando perdo la connessione internet, il mio registro mostra:

Log: -8024- Downloaded.
Log: -8024- Downloaded.
Log: -8024- Downloaded.
Log: -8024- Downloaded.
Log: -6024- Downloaded. (some lower number)

E poi il mio programma si blocca proprio sul while ((len1 = ecc ho bisogno di fare in modo in cui Internet si disconnette aspetto l'internet da collegare di nuovo e poi riprendere il download.

È stato utile?

Soluzione

Date un'occhiata qui: http://developer.android. com / riferimento / java / nio / canali / SocketChannel.html

EDIT (sulla base di commento): http://www.jguru.com/faq/view.jsp?EID= 72378

Quindi, i pensieri sulla base di quanto sopra .... si potrebbe mettere la lettura in un thread e periodicamente controllare per vedere se il filo si è fermato lettura dei dati (aggiornare una variabile condivisa probabilmente). Se ha uccidere la connessione e il filo e trattare con esso tuttavia è necessario.

Un'altra alternativa è di non usare il HttpURLConnection e trattare con i bit necessari la vostra auto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top