Android Dropbox синхронизировать API загрузки файла и отображать индикатор выполнения

Мое приложение выглядит как пример Dropbox Notes из Dropbox Sync SDK, за исключением того, что я хочу отображать индикатор выполнения в виде списка при загрузке нового файла в Dropbox.
Пример прослушивания текстового файла изменяется на файл обновления, но в моем случае я загружаю файлы многих типов (текстовые и двоичные). Вот моя попытка загрузить файл:

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); 

Этот код выше может работать, но он отображает файл только в списке после завершения загрузки. Поскольку в примере используется DbxFileInfo, поэтому я не знаю, как получить статус этого файла при загрузке.
Есть какой-либо способ сделать это?

2 ответа

Как только вы сохраните файл, я думаю, вы должны увидеть его с listFolder, Вы говорите, что это не то, что вы видите?

С точки зрения отображения хода загрузки, имейте в виду, что API Sync предназначен для автономной работы с кэшированием. Вероятно, не имеет смысла показывать индикатор выполнения, если вы не подключены к Интернету... это может занять часы (или дни) до загрузки файла.

Вы можете использовать разные флаги для статуса загружаемого файла, например, выгрузка, выгрузка uploadFinish как логические переменные

Другие вопросы по тегам