我一直在尝试通过网络服务下载一些文件并完全下载,但现在我正在尝试添加一项功能,如果文件没有完全下载,应用程序应该只下载剩余的字节数组和附加到现有的,使用
connection = (HttpConnection) cf.getConnection(_url).getConnection();
int alreadyDownloaded = 0;
if(connection.getResponseCode() == HttpConnection.HTTP_OK) {
inputStream = new DataInputStream(connection.openInputStream());
final int len = (int) connection.getLength();
if (len > 0) {
String filename = _url.substring(_url.lastIndexOf('/') + 1);
FileConnection outputFile = (FileConnection) Connector.open(path + filename, Connector.READ_WRITE, true);
if (!outputFile.exists()) {
outputFile.create();
} else {
alreadyDownloaded = (int) outputFile.fileSize();
connection.setRequestProperty("Range", "bytes=" + alreadyDownloaded + "-");
}
在这一行
connection.setRequestProperty("Range", "bytes=" + alreadyDownloaded + "-");
我得到一个说
的例外流未处于设置状态
如何摆脱这个错误?
答案 0 :(得分:2)
问题在于您正在调用此行
connection.setRequestProperty("Range", "bytes=" + alreadyDownloaded + "-");
>>之后 您已经打开了连接,并发送了请求参数。因此,现在更改Range
属性为时已晚。
openOutputStream打开输出流后 openDataOutputStream方法,尝试更改请求 通过setRequestMethod或setRequestProperty的参数将被忽略。 一旦发送了请求参数,这些方法就会抛出 IOException。
如果您在该文档中进一步了解,它们会显示一个示例,这可以解释一下:
// Getting the response code will open the connection,
// send the request, and read the HTTP response headers.
// The headers are stored until requested.
rc = c.getResponseCode();
所以,你只需要在这行之前致电setRequestProperty()
:
if(connection.getResponseCode() == HttpConnection.HTTP_OK) {