2014-11-03 26 views
1

我正在使用Google雲端硬盤Web服務API進行Android應用的製作。現在,我試圖獲取根文件夾中的文件名列表。不過,我相信我做這個當前方法是無效的:適用於Android的Google雲端硬盤Web服務API - 在文件夾中顯示文件名

public void searchRoot() 
{ 
    Thread t = new Thread(new Runnable() 
    { 
     @Override public void run() 
     { 
      try 
      { 
       Children.List request = service.children().list("root"); 
       do 
       { 
        try 
        { 
         ChildList children = request.execute(); 

         for(ChildReference child : children.getItems()) 
         { 
          File file = service.files().get(child.getId()).execute(); 
         } 
         request.setPageToken(children.getNextPageToken()); 
        } 
        catch(IOException e) 
        { 
         request.setPageToken(null); 
        } 
       } 
       while(request.getPageToken() != null && request.getPageToken().length() > 0); 
      } 
      catch(IOException e) 
      { 

      } 
     } 
    }); 
    t.start(); 
} 

我認爲這種方法是低效的,因爲我第一次調用request.execute()來獲取所有的孩子列表中的根文件夾,但隨後我必須爲每個孩子調用service.files()。get(child.getId())。execute()以獲得每個孩子可讀的文件名。如果根文件夾中有大量文件,則可能需要大量時間來獲取所有文件名。我的問題是 - 有沒有更好的方法來獲取文件名列表?就像只有一個API調用可以返回根文件夾中所有文件名的查詢一樣?

另外,我瞭解Google Drive SDK具有我請求的功能。不過,我選擇使用Google雲端硬盤網絡服務API,因爲我最終嘗試從我的Google雲端硬盤帳戶中傳輸非公開媒體,而且我認爲雲端硬盤SDK不支持此功能。

回答

1

我想通了。而不是使用service.children().list(「root」),使用service.files().list().setQ(「父'中的'root')

public void searchRoot() 
{ 
    Thread t = new Thread(new Runnable() 
    { 
     @Override public void run() 
     { 
      try 
      { 
       com.google.api.services.drive.Drive.Files.List request = service.files().list().setQ("'root' in parents"); 
       do 
       { 
        try 
        { 
         FileList children = request.execute(); 

         for(File child : children.getItems()) 
         { 
          Log.d("Debug", child.getTitle()); 
         } 
         request.setPageToken(children.getNextPageToken()); 
        } 
        catch(IOException e) 
        { 
         request.setPageToken(null); 
        } 
       } 
       while(request.getPageToken() != null && request.getPageToken().length() > 0); 
      } 
      catch(UserRecoverableAuthIOException e) 
      { 
       startActivityForResult(e.getIntent(), REQUEST_SEARCH_ROOT); 
      } 
      catch(IOException e) 
      { 

      } 
     } 
    }); 
    t.start(); 
} 
相關問題