2015-10-26 18 views
3

我一直在努力爭取此代碼,但一整天都沒有運氣。我開始遵循Google代碼sampleGoogle Drive Android API - DriveId無效並且爲空ResourceId

問題是該文件夾被成功創建,但在onResult(),我總是得到一個無效或不完整的DriveId或resourceId。這意味着我無法在創建的文件夾內創建文件。這裏是我使用的代碼:

public class CreateFolderActivity extends BaseDemoActivity { 

@Override 
public void onConnected(Bundle connectionHint) { 
    super.onConnected(connectionHint); 
    MetadataChangeSet changeSet = new MetadataChangeSet.Builder() 
      .setTitle("MyAppFolder").build(); 
    Drive.DriveApi.getRootFolder(getGoogleApiClient()).createFolder(
      getGoogleApiClient(), changeSet).setResultCallback(callback); 
} 

final ResultCallback<DriveFolderResult> callback = new ResultCallback<DriveFolderResult>() { 
    @Override 
    public void onResult(DriveFolderResult result) { 
     if (!result.getStatus().isSuccess()) { 
      showMessage("Error while trying to create the folder"); 
      return; 
     } 

     // this value is always invalid with ending == operators 
     Log.d("DRIVEID", "Created a folder: " + result.getDriveFolder().getDriveId()); 
    } 
    }; 
} 

每當我運行此代碼,我得到這不完全會出現以下標識:

CAESABi2VyCCzdWOuVMoAQ== 

我不知道這裏發生了什麼!

我已經Google瞭解並添加了偵聽器來偵聽完成事件,但它們都沒有工作。

我在這方面看到過類似的問題,但沒有一個適合我。

我手動複製FolderId通過我的瀏覽器後,應用程序創建它,然後粘貼到我的android代碼和應用程​​序創建一個文件成功。但這不是應該如何工作的。

我想等待同步完成,如果是,如何?

預先感謝您!

+0

任何解決方案arround?我使用驅動器文件選取器創建文件夾時遇到同樣的問題。 – Flayn

回答

5

您的問題的答案大概可以找到here。你得到的DriveId是可以的,但你不應該直接處理它。這是'初步'在提交對象後更改的DriveId(請參閱SO 22874657)。你可以測試它比較你得到的DriveId與你在'onCompletion(CompletionEvent event)'中得到的DriveId。

這只是GDAA邏輯的副作用之一,可以屏蔽線上/離線網絡狀態導致的不可預知的延遲。你只需要依靠回調。

但我很驚訝你不能立即使用這個'初步的'DriveId(在文件夾的情況下)作爲另一個對象(文件夾/文件)的父項。我從來沒有經歷過,將「初步」DriveId立即傳遞給另一個GDAA方法。
這與ResourceId的情況不同。那個在GDAA中是次要的,只有當你走出設備時才使用它。在對象提交(上傳)之前,GDAA不知道它。

我在此demo中使用了類似的邏輯(創建文件夾/文件樹)(請參閱MainActivity.createTree()方法)。歡迎您來挖掘它。

SO 34318220中討論了一個相關的問題。

好運