2017-02-20 4 views
1

Как я могу перечислить все файлы, рекурсивно в папке DropBox? я попытался код ниже, но не возвращает никакого результата:Список всех файлов, рекурсивно, в Android Dropbox API

result = dbxClient.files().search("", "*"); 

И это возвращает файлы в пути, а не вложенные папки:

result = dbxClient.files().listFolder(path); 
+0

Обратите внимание, что ['поиск'] (https://dropbox.github.io/dropbox-sdk-java/api-docs/v2.1.x/com/dropbox/core/v2/files/DbxUserFilesRequests. html # search-java.lang.String-java.lang.String-) не поддерживает подстановочный символ '' * ''. Однако вы должны использовать функциональные возможности папки списка. – Greg

ответ

1

Вы можете проверить эту ссылку, перейти к внутреннему классу 'FolderScanTask'. Он содержит рабочий код для Android: https://github.com/ControlX/Android-Dropbox-UploadImage-To-SpecificFolder-By-FolderSelection/blob/master/app/src/main/java/io/github/controlx/dbxdemo/MainActivity.java

Это работа продолжается, здесь я просто сделать ArrayList для родительских папок, имеет больше логики, как предложил Грег уже там вам просто нужно заполнить это.

фрагмент кода для того же:

 String path = ""; 
     DbxClientV2 dbxClient = DropboxClient.getClient(ACCESS_TOKEN); 
     TreeMap<String, Metadata> children = new TreeMap<String, Metadata>(); 

     try { 
      try { 
       result = dbxClient.files() 
         .listFolder(path); 
      } catch (ListFolderErrorException ex) { 
       ex.printStackTrace(); 
      } 

      List<Metadata> list = result.getEntries(); 
      cs = new CharSequence[list.size()]; 
      arrayList = new ArrayList<>(); 
      arrayList.add("/"); 
      while (true) { 
       int i = 0; 
       for (Metadata md : result.getEntries()) { 
        if (md instanceof DeletedMetadata) { 
         children.remove(md.getPathLower()); 
        } else { 
         String fileOrFolder = md.getPathLower(); 
         children.put(fileOrFolder, md); 
         if(!fileOrFolder.contains(".")) 
          arrayList.add(fileOrFolder); 
        } 
        i++; 
       } 

       if (!result.getHasMore()) break; 

       try { 
        result = dbxClient.files() 
          .listFolderContinue(result.getCursor()); 
       } catch (ListFolderContinueErrorException ex) { 
        ex.printStackTrace(); 
       } 
      } 
     } catch (DbxException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Здесь ArrayList только для моего использования, где я просто сделать список только папки. Итак, измените соответствующим образом.

Смежные вопросы