Java 在android中获取readBytes的进度
我已经看过了 我正在使用以下代码从internet下载文件:Java 在android中获取readBytes的进度,java,android,inputstream,Java,Android,Inputstream,我已经看过了 我正在使用以下代码从internet下载文件: try { InputStream is = new URL(pdfUrl).openStream(); byte[] pdfData = readBytes(is); return pdfData; } catch (IOException e) { e.printStackTrace(); return null; } public byte[] readBytes(InputStre
try {
InputStream is = new URL(pdfUrl).openStream();
byte[] pdfData = readBytes(is);
return pdfData;
} catch (IOException e) {
e.printStackTrace();
return null;
}
public byte[] readBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
有什么方法可以让我知道下载文件的进度吗
我看到的答案是使用while
循环,但我不知道在这种情况下如何使用它。
编辑:
我在AsyncTask中使用此选项:
protected byte[] doInBackground(String... url) {
pdfUrl = url[0];
try {
InputStream is = new URL(pdfUrl).openStream();
DownloadBytes downloadData = readBytes(is);
byte[] pdfData = downloadData.getBytes();
progress = downloadData.getProgress();
return pdfData;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
如何在此方法中调整
publishProgress()
?这将在您的readBytes()
实现中进行,您的问题没有显示。如果您切换到更现代的HTTP客户端API,您可以使用带有OkHttp的拦截器来监视下载进度。@Commonware抱歉,我错过了,我已经更新了问题并添加了readBytes()
Um的代码,您已经有了while
循环。它位于readBytes()
方法中。在这里,您可以跟踪您阅读了多少内容,并且可以使用第一个链接到的问题的答案中显示的getContentLength()
方法来确定总下载量。@commonware请检查我更新的问题。我想知道如何使用publishProgress()
?嗯,如果readBytes()
是一个AsyncTask
,您可以将某种DownloadEvent
发布到publishProgress()
,其中每个事件都有要下载的总字节数以及到目前为止下载的总字节数。然后,您的onProgressUpdate()
将使用该信息更新您的UI。这将出现在您的readBytes()
实现中,您的问题没有显示出来。如果您切换到更现代的HTTP客户端API,您可以使用带有OkHttp的拦截器来监视下载进度。@Commonware抱歉,我错过了,我已经更新了问题并添加了readBytes()
Um的代码,您已经有了while
循环。它位于readBytes()
方法中。在这里,您可以跟踪您阅读了多少内容,并且可以使用第一个链接到的问题的答案中显示的getContentLength()
方法来确定总下载量。@commonware请检查我更新的问题。我想知道如何使用publishProgress()
?嗯,如果readBytes()
是一个AsyncTask
,您可以将某种DownloadEvent
发布到publishProgress()
,其中每个事件都有要下载的总字节数以及到目前为止下载的总字节数。然后,您的onProgressUpdate()
将使用该信息更新您的UI。