Android Developers Blog推荐使用HttpURLConnection
,而不是Apache的HttpClient
(http://android-developers.blogspot.com/2011/09/androids-http-clients.html)。我接受建议 ,并在报告文件上传进度时遇到问题。有没有什么办法可以使用HttpUrlConncetion正确获取上传进度
我的代码抢进度是这样的:
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非常快无论文件大小,但文件却仍然上传到服务器UTIL我得到来自服务器的响应。当我呼叫out.write()
时,似乎HttpURLConnection
将内部缓冲区中的所有数据都缓存起来。
所以,我怎样才能得到实际的文件上传进度?似乎httpclient
可以做到这一点,但 httpclient
不首选...任何想法?
因为成为不使用apache客户端的明智开发人员之一,您会获得惊人的+1。在这个网站上,以apache客户端的名义看到了一些Android中最糟糕的网络决策。其次,通常进度与上传大文件有关。你的档案有多大?如果是这样,分块传输编码适合您的文件? – Tom
@汤姆我的应用程序需要支持不超过30m较大的上传文件,并在服务器端不支持现在块传输编码... – toki
@Toki这是旧的,但如果你想知道你拼错在第2行 – charliebeckwith