2015-09-24 40 views
3

我使用新的谷歌驅動器API,我無法從我的谷歌驅動器獲取所有文件夾,我只得到我用谷歌驅動器API創建的文件夾... 任何人都知道爲什麼會這樣?在Android上獲取所有文件夾的谷歌驅動器api

這是我的代碼:

@Override 
    protected void onResume() { 
     super.onResume(); 
     if (mGoogleApiClient == null) { 
      // Create the API client and bind it to an instance variable. 
      // We use this instance as the callback for connection and connection 
      // failures. 
      // Since no account name is passed, the user is prompted to choose. 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Drive.API) 
        .addScope(Drive.SCOPE_FILE) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     // Connect the client. Once connected, the camera is launched. 
     mGoogleApiClient.connect(); 
    } 


    /** 
    * Handles resolution callbacks. 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) { 
      mGoogleApiClient.connect(); 

     } 
    } 

    /** 
    * Called when activity gets invisible. Connection to Drive service needs to 
    * be disconnected as soon as an activity is invisible. 
    */ 
    @Override 
    protected void onPause() { 
     if (mGoogleApiClient != null) { 
      mGoogleApiClient.disconnect(); 
     } 
     super.onPause(); 
    } 

    /** 
    * Called when {@code mGoogleApiClient} is connected. 
    */ 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     Log.i(TAG, "GoogleApiClient connected"); 

     rootFolder = Drive.DriveApi.getRootFolder(mGoogleApiClient); 

     rootFolder.listChildren(getGoogleApiClient()).setResultCallback(pruebaChildren); 

    } 


    ResultCallback<DriveApi.MetadataBufferResult> pruebaChildren = new 
      ResultCallback<DriveApi.MetadataBufferResult>() { 
       @Override 
       public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) { 
        if (!metadataBufferResult.getStatus().isSuccess()) { 
         showMessage("Problem while retrieving files"); 
         return; 
        } 
        Log.i(TAG,"got root folder"); 
        MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer(); 
        Log.i(TAG,"Buffer count " + buffer.getCount()); 
        if(buffer.getCount() == 0){ 
         createFolderApp(); 
        } 
        else{ 
         for(Metadata m : buffer){ 
          Log.i(TAG,"Metadata name " + m.getTitle() + "(" + (m.isFolder() ? "folder" : "file") + ")"); 
          if (m.isFolder() && m.getTitle().equals(TAG)){ 
           Log.i(TAG,"APP FOLDER FOUND"); 
           Drive.DriveApi.getFolder(mGoogleApiClient, m.getDriveId()) 
             .listChildren(mGoogleApiClient) 
             .setResultCallback(foreachAppAplication); 
          } 
         } 
        } 
        return; 
       } 
      }; 

,現在我想看到rootFolder驅動器的所有文件夾,我嘗試requestSync(),但結果是一樣的...我需要幫助,請!

另一個問題:我如何設置AppFolder?我只看到getAppFolder,但我怎麼設置?

感謝

回答

6

通過設計,GDAA僅支持文件範圍內,也就是說,它會發現在Android應用程序中創建/只列出文件夾/文件。

有它周圍的2種方式:

  1. 使用的GDAA的intents一個,基本上讓用戶選擇文件/文件夾。這樣它將可用於您的應用程序。
  2. 使用不同的API,REST Api,它支持DRIVE範圍,爲您的應用程序提供全套文件/文件夾。如果你想學習這兩種API的行爲

,我已經把在Github上(在RESTGDAA CRUD演示包裝)兩個不同的演示。

問題的第二部分沒有答案。你不設置應用程序文件夾,你只能得到它的DriveFolder ID。你用它來創建/檢索對象。

DriveFolder appFldr = Drive.DriveApi.getAppFolder(mGooleApiClient); 
    appFldr.createFile(...); 
    appFldr.createFolder(...); 
    appFldr.listChildren(...); 
    appFldr.queryChildren(...); 

...不要忘記添加SCOPE_APPFOLDER範圍

好運

+0

嗨,我是通過REST API證明,但現在我不能設置憑據.setSelectedAccountName(帳戶名); ...我遵循這個例子。 https://developers.google.com/drive/web/quickstart/java 在調試中,我發現當我選擇新帳戶時,使用此方法不會重寫憑據... – abdijar

+0

https://developers.google .com/drive/web/quickstart/android#step_2_enable_the_api_name這個例子對不起 – abdijar

+0

我不知道這些快速入門,看看init()方法[這裏](https://github.com/seanpjanson/RESTDemo/blob /master/app/src/main/java/com/spjanson/restdemo/REST.java) – seanpj

相關問題