Android Developers Blog consiglia di utilizzare HttpURLConnection
diverso da apache HttpClient
(http://android-developers.blogspot.com/2011/09/androids-http-clients.html). Prendo il consiglio e riscontro problemi nel segnalare il progresso del caricamento del file.C'è un modo per ottenere il progresso del caricamento correttamente con HttpUrlConncetion
il mio codice di afferrare il progresso è come questo:
try {
out = conncetion.getOutputStream();
in = new BufferedInputStream(fin);
byte[] buffer = new byte[MAX_BUFFER_SIZE];
int r;
while ((r = in.read(buffer)) != -1) {
out.write(buffer, 0, r);
bytes += r;
if (null != mListener) {
long now = System.currentTimeMillis();
if (now - lastTime >= mListener.getProgressInterval()) {
lastTime = now;
if (!mListener.onProgress(bytes, mSize)) {
break;
}
}
}
}
out.flush();
} finally {
closeSilently(in);
closeSilently(out);
}
excutes questo codice molto veloce per tutto ciò che la dimensione del file, ma il file è in realtà ancora caricare sul server util ottengo risposta dal server. sembra che HttpURLConnection
memorizzi nella cache tutti i dati nel buffer interno quando chiamo out.write()
.
Quindi, come posso ottenere il progresso effettivo del caricamento del file? Sembra che httpclient
possa farlo, ma non è preferibile lo httpclient
... qualche idea?
ottieni un incredibile e sorprendente +1 per essere uno dei sensati sviluppatori che non utilizzano il client di Apache. Alcune delle peggiori decisioni di rete in Android sono state viste su questo sito nel nome del client apache. In secondo luogo, in genere il progresso è rilevante nel caricare un file di grandi dimensioni. Quanto è grande il tuo file? In tal caso, la codifica del trasferimento Chunked è appropriata per il tuo file? – Tom
@Tom La mia app deve supportare il caricamento di file non superiori a 30 m, e il lato server non supporta la codifica di trasferimento chunked ora ... – toki
@Toki questo è vecchio ma nel caso ti stavi chiedendo di aver sbagliato la connessione nella riga 2. – charliebeckwith