GoogleDrive SDK - 在上传完成时获取resourceId

时间:2016-02-15 10:44:59

标签: android google-drive-api

我希望在上传后获取resourceId,但它返回null。你能帮助我获得这个价值吗? 提前谢谢。

Drive.DriveApi.getFolder(getGoogleApiClient(), driveIdResult.getDriveId())
    .createFile(getGoogleApiClient(), changeSet, driveContents)
    .setResultCallback(new ResultCallbacks<DriveFolder.DriveFileResult>() {
        @Override
        public void onSuccess(@NonNull final DriveFolder.DriveFileResult driveFileResult) {
            if (driveFileResult.getStatus().isSuccess()) {
                String driveId = driveFileResult.getDriveFile().getDriveId().toString();
                //return this:
                //DriveId:CAESHDBCeEc0ZnI0YkQ0ZVZRa1E1YTNVMFVtUTRkRlUY1GcgsPT0w7xTKAA=

                String resourceId = driveFileResult.getDriveFile().getDriveId().getResourceId();
                //null
                //but I want something like this: 0BxG4fr4bD4eVQXRjbTRBV2RMUHc
                uploadCallBack.onFinish(true, resourceId);
            }
        }

        @Override
        public void onFailure(@NonNull com.google.android.gms.common.api.Status status) {
            uploadCallBack.onFinish(false, null);
        }
});

1 个答案:

答案 0 :(得分:1)

我认为您可以按照此用户的建议: https://stackoverflow.com/a/31553269/1045199

根据您的代码判断,DriveId.toString()会返回一些有用的内容,您可以将其与事件进行比较。我会说:

  • 使用<String, UploadCallback>作为键
  • 创建DriveId.toString地图
  • 使用DriveEventService
  • 设置并注册onCompletion()
  • 在上传结果回调中,请致电file.addChangeSubscription(getGoogleApiClient()),以便您在[{1}}
  • 中收到通知
  • DriveEventService内部,您可以通过调用onCompletion()
  • 获取用于Map.get()的DriveId

我没有对它进行测试,但至少在理论上它应该可行。

编辑:https://stackoverflow.com/a/25555159/1045199描述了一种非常类似的方法。在构建event.getDriveId()时,请务必致电setNotifyOnCompletion(true)