我的应用程序看起来像Dropbox sync sdk中的Dropbox Notes示例,但我想在将新文件上传到Dropbox时在listview中显示进度条。
示例监听文本文件更改为更新文件,但在我的情况下,我上传了许多文件类型(文本和二进制)。这是我尝试上传文件:
DbxPath path = new DbxPath("/test.pdf");
DbxAccount acct = NotesAppConfig.getAccountManager(getActivity()).getLinkedAccount();
DbxFile mFile;
DbxFileSystem fs = DbxFileSystem.forAccount(acct);
try {
mFile = fs.open(path);
} catch (DbxException.NotFound e) {
mFile = fs.create(path);
}
mFile.addListener(mChangeListener);
FileOutputStream out = mFile.getWriteStream();
File sdcard = new File(Environment.getExternalStorageDirectory(), "test.pdf");
FileInputStream in = new FileInputStream(sdcard);
copyFile(in, out);
out.close();
in.close();
private final DbxFile.Listener mChangeListener = new DbxFile.Listener() {
@Override
public void onFileChange(DbxFile file) {
try {
if(file.getSyncStatus().pending == PendingOperation.UPLOAD ){
long byteTotal = file.getSyncStatus().bytesTotal;
long byteTransfer = file.getSyncStatus().bytesTransferred;
Log.d(TAG, "file changed: " + byteTransfer + " / " + byteTotal);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
public static void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}
加载程序使用此方法获取文件列表:
List<DbxFileInfo> entries = dbxFileSystem.listFolder(dbxPath);
上面的代码可以正常工作,但只在上传完成后才会在listview中显示文件。因为该示例使用DbxFileInfo
,所以我不知道如何在上传时获取此文件的状态。
有没有办法做到这一点?
答案 0 :(得分:0)
您可以对正在上传的文件的状态使用不同的标志,例如上传,上传的uploadFinish为boolean varibles
答案 1 :(得分:0)
保存文件后,我相信您应该看到listFolder
。你是说那不是你看到的吗?
在显示上传进度方面,请注意,Sync API旨在通过缓存脱机工作。如果您没有连接到互联网,显示进度条可能没有意义......在文件上传之前可能需要数小时(或数天)。