我想在我的AndroidHttpClient中实现ProgressDialog。我在这里找到了一个简单的实现CountingMultipartEntity。
另外我添加了内容长度支持。我重写了方法。
FileBody 上传几乎可以正常工作。当上传包含一个文件时,它可以完美运行,但是当有两个文件时,第二个文件只上传了部分。
InputStreamBody 有效,但仅当我不计算InputStream的长度时。所以我必须重置它,但是如何?addPart
这是我最重要的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。
感谢您的任何建议。