3

我有 google drive sdk quick start for android 启动和运行。

我要做的是扩展应用程序,以便能够在驱动器新的“App Data”文件夹上上传文件,并能够再次下载该文件(在 android 设备之间同步配置文件)

上传文件工作正常。但是当我尝试下载同一个文件时,我可以获得它的元数据,如 fileID、fileTitle、fileDownloadURL 等,但无法下载内容。我在尝试时收到 401 Unauthorized 错误。

我正在使用 AUTH SCOPE“ https://www.googleapis.com/auth/drive.appdata ”来访问 appdata。

知道为什么会这样吗?

4

2 回答 2

3

仅使用drive.appdata范围时,我可以重现这一点。如果我添加另一个 Drive 范围,例如drive.readonly范围,它可以正常工作。

我同意这是一个错误(或者至少是令人惊讶的行为),所以我会提出一个错误,但现在请使用上面的解决方法。

于 2013-04-08T03:33:23.427 回答
0

尝试以下代码来检索内容

public void retrieveContents(DriveFile file) {
        // [START drive_android_open_file]
        Task<DriveContents> openFileTask =
                getDriveResourceClient().openFile(file, DriveFile.MODE_READ_ONLY);
        // [END drive_android_open_file]
        // [START drive_android_read_contents]


        openFileTask.continueWithTask(new Continuation<DriveContents, Task<Void>>() {
            @Override
            public Task<Void> then(@NonNull Task<DriveContents> task) throws Exception {
                DriveContents contents = task.getResult();
                // Process contents...
                // [START_EXCLUDE]
                // [START drive_android_read_as_string]
                try (BufferedReader reader = new BufferedReader(
                        new InputStreamReader(contents.getInputStream()))) {
                    StringBuilder builder = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line).append("\n");
                    }

                    Log.e("result ", builder.toString());
                }
                // [END drive_android_read_as_string]
                // [END_EXCLUDE]
                // [START drive_android_discard_contents]
                Task<Void> discardTask = MainActivity.this.getDriveResourceClient().discardContents(contents);
                // [END drive_android_discard_contents]
                return discardTask;
            }
        })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });

        // [END drive_android_read_contents]
    }
于 2018-11-10T21:00:48.417 回答