【问题标题】:Unable to retrieve Google Drive files and folders using new Drive API无法使用新的 Drive API 检索 Google Drive 文件和文件夹
【发布时间】:2012-06-11 16:01:25
【问题描述】:

我正在尝试从我的 Android 应用程序中从 Google Drive 中获取文件夹中的文件列表,但到目前为止还没有成功。我正在使用 google-api-drive-v1-rev4-java-1.6.0-beta 和 google-api-client-1.9.0。我还从http://code.google.com/p/google-api-java-client/wiki/Android 的示例中构建了类似于 calendar-android-sample 和 tasks-android-sample 的代码。

我似乎找不到如何使用 files() 来获取文件夹列表,甚至找不到我想要的文件夹的 ID。 tasks-android-sample 在 get() 方法中使用 '@default' 来获取任务列表。我会在 get 方法中使用什么来首先获取文件夹列表,搜索我的文件夹,获取 id,然后获取该文件夹中的文件列表?

AsyncLoadDocs.java:(注意:我使用 getFields() 只是为了查看 Get 对象是否包含任何元数据,此时不包含。)

package com.mysite.myapp.docs;

import com.google.api.services.drive.Drive;
import com.google.api.services.drive.Drive.Files;
import com.google.api.services.drive.Drive.Files.Get;
import com.google.api.services.drive.model.File;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ArrayAdapter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Asynchronously load the docs with a progress dialog.
 *
 * @author ms
 */
class AsyncLoadDocs extends AsyncTask<Void, Void, List<String>> {

private static final String TAG = "AsyncLoadDocs";
private final GDocsSync gDocsSync;
private final ProgressDialog dialog;
private final Drive entry = null;
private com.google.api.services.drive.Drive service;

  AsyncLoadDocs(GDocsSync gDocsSync) {
    this.gDocsSync = gDocsSync;
    service = gDocsSync.driveClient;
    dialog = new ProgressDialog(gDocsSync);
  }

  @Override
  protected void onPreExecute() {
    dialog.setMessage("Loading docs...");
    dialog.show();
  }

  @Override
  protected List<String> doInBackground(Void... arg0) {
    try {
      List<String> folderNames = new ArrayList<String>();

      Get get = service.files().get("@default").setProjection("FULL");
      String fields = get.getFields();
      Log.d(TAG, "Fields: " + fields);

      return folderNames;
    } catch (IOException e) {
        gDocsSync.handleGoogleException(e);
      return Collections.singletonList(e.getMessage());
    } finally {
        gDocsSync.onRequestCompleted();
    }
  }

  @Override
  protected void onPostExecute(List<String> result) {
    dialog.dismiss();
  }
}

任何帮助将不胜感激。日历和任务示例都使用我的 API 密钥从 Google 成功检索数据,为什么这个 Drive 代码没有?

【问题讨论】:

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


    【解决方案1】:

    Drive API 仅授予对两类文件的访问权限:

    • 用户使用给定云端硬盘应用创建的文件
    • 用户使用给定云端硬盘应用打开的文件

    出于安全原因,无法列出用户云端硬盘帐户中的所有文件:

    https://developers.google.com/drive/apps_overview#granting_file-level_access

    有关 Android 环境中的更多选项,请查看以下其他答案:

    【讨论】:

    • 感谢克劳迪奥,这是有道理的。出于我的目的,我不需要访问所有文件,只需要访问我的文件夹。所以我想我需要用我的应用程序创建一个文件夹,然后访问它。与此同时,我已经开始使用 docs api 实现集成。我遇到了返回 type/html 而不是 xml 的问题,需要弄清楚那里发生了什么。我计划参加你的会议 (developers.google.com/events/io/sessions/gooio2012/705),讨论如何在 Google IO 上将 Drive 与 Android 集成,也许我们可以聊聊?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多