java – Google Drive Android API – 无效的DriveId和Null ResourceId

我一整天都没有运气就与这段代码作斗争.我从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代码,应用程序成功创建了一个文件.但这不是事情应该如何运作.

我想等待同步完成,如果是的话,怎么样?

先谢谢你!

您可能会找到问题的答案here.您获得的DriveId没问题,但您不应该直接处理它.这是一个’初步’DriveId,在提交对象后会发生变化(再次参见SO 22874657).你可以测试它比较你获得的DriveId和你将进入’onCompletion(CompletionEvent事件)’的DriveId.

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

但我很惊讶您不能立即将此“初步”DriveId(如果是文件夹)用作另一个对象(文件夹/文件)的父级.我从未体验过它,将’初步’DriveId立即传递给另一个GDAA方法.
在ResourceId的情况下它是不同的.那个在GDAA中是次要的,只有当你走出设备时才使用它.在提交(上载)对象之前,GDAA不知道.

我在demo中使用了类似的逻辑(创建文件夹/文件树)(参见MainActivity.createTree()方法).欢迎你深入挖掘它.

SO 34318220中讨论了相关问题.

祝你好运

https://stackoverflow.com/questions/33355665/google-drive-android-api-invalid-driveid-and-null-resourceid

转载注明原文:java – Google Drive Android API – 无效的DriveId和Null ResourceId