Google Drive Android API - 无效的DriveId和Null ResourceId

时间:2015-10-26 21:08:48

标签: java android google-drive-api google-drive-android-api

我一直在与这段代码作战,没有运气。我开始在Google上关注此代码sample

问题是该文件夹已成功创建但在 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());
    }
  };
}

每当我运行此代码时,我都会得到以下不完整的ID:

CAESABi2VyCCzdWOuVMoAQ==

我不知道这里发生了什么!

我有谷歌,并阅读添加听众以听取完成事件但没有一个似乎工作。

我在SO上看到了几乎类似的问题,但它们都不适合我。

我在应用程序创建后通过浏览器手动复制FolderId,然后粘贴到我的android代码,应用程序成功创建了一个文件。但这不是事情应该如何运作。

我想等待同步完成,如果是,怎么办?

提前谢谢!

1 个答案:

答案 0 :(得分:5)

可能会找到问题的答案here。你得到的DriveId没问题,但你不应该直接处理它。这是一个&#39; 初步&#39;在提交对象后更改的DriveId(再次参见SO 22874657)。你可以测试它比较DriveId你得到的DriveId你将进入&#39; onCompletion(CompletionEvent事件)&#39;。

这只是GDAA逻辑的副作用之一,可以保护您免受在线/离线网络状态的影响,从而导致无法预测的延迟。你只需要依靠回调。

但我很惊讶你不能使用这个&#39;初步&#39; DriveId(如果是文件夹)立即作为另一个对象(文件夹/文件)的父级。我从来没有经历过这种情况,通过了初步的&#39; DriveId立即采用另一种GDAA方法 在ResourceId的情况下它是不同的。那个在GDAA中是次要的,只有当你走出设备时才使用它。在提交(上传)对象之前,GDAA不知道。

我在这个demo中使用了类似的逻辑(创建文件夹/文件树)(参见MainActivity.createTree()方法)。欢迎您加入其中。

SO 34318220中讨论了一个相关问题。

祝你好运