Я хочу реализовать ProgressDialog в моем AndroidHttpClient .Я нашел простую реализацию здесь CountingMultipartEntity .
Дополнительно я добавил поддержку длины контента.Я переопределяю метод addPart
.
Загрузка FileBody работает почти нормально.Когда выгрузка содержит один файл, он работает отлично, но когда есть два файла, второй файл загружается только частично.
InputStreamBody работает, но только когда я не считаю длину InputStream .Поэтому я должен сбросить его, но как?
Здесь мое переопределение addPart
:
@Override
public void addPart(String name, ContentBody cb) {
if (cb instanceof FileBody) {
this.contentLength += ((FileBody) cb).getFile().length();
} else if (cb instanceof InputStreamBody) {
try {
CountingInputStream in =
new CountingInputStream(((InputStreamBody) cb).getInputStream());
ObjectInputStream ois = new ObjectInputStream(in);
ois.readObject();
this.contentLength += in.getBytesRead();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.addPart(name, cb);
}
CountingInputStream является простым расширением InputStream:
public class CountingInputStream extends InputStream {
private InputStream source;
private long bytesRead = 0;
public CountingInputStream(InputStream source) {
this.source = source;
}
public int read() throws IOException {
int value = source.read();
bytesRead++;
return value;
}
public long getBytesRead() {
return bytesRead;
}
}
Подсчет работает почти, есть только 2 байта, которых там быть не должно.Но это так важно.
Сначала я подумал, что поток должен быть сброшен.Сброс, вызванный после in.getReadedBytes();
, приводит к IOException .
Спасибо за любые советы.