Existe alguma maneira de obter o progresso do upload corretamente com o HttpUrlConncetion?
Blog de desenvolvedores Android recomenda usarHttpURLConnection
diferente do apacheHttpClient
(http://android-developers.blogspot.com/2011/09/androids-http-clients.html). Eu aceito o conselho e obtenho problema ao relatar o progresso do upload do arquivo.
meu código para pegar progresso é assim:
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);
}
este código excede muito rápido para qualquer tamanho de arquivo, mas o arquivo ainda está fazendo upload para o utilitário do servidor e recebo resposta do servidor. parece queHttpURLConnection
armazena em cache todos os dados no buffer interno quando eu chamoout.write()
.
Então, como posso obter o progresso real do upload de arquivos? Parece quehttpclient
pode fazer isso, mashttpclient
não é preferida ... alguma ideia?