1

我已经与适用于 Android 的 Google Drive API 抗争了 50 多个小时,而且还没有接近一英寸。据我了解,有 1001 种方法可以访问 Google Drive(Google Docs API、REST 和 Google Drive SDK v2)。我正在使用 Google Drive SDK v2。我想访问 Google Drive 来上传 jpeg 文件。平台,Android 2.2+。

我试过的:

  • 使用最近发布的 SDK: http ://code.google.com/p/google-api-java-client/wiki/APIs#Drive_API

  • 我看过 Google I/O 会议,但最重要的部分(如何使用您的客户端 ID 和客户端密码创建 Drive 对象)被遗漏了: https ://developers.google.com/events/io/sessions /gooio2012/705/

  • 我在https://code.google.com/apis/console创建了多个密钥。我创建(并测试)的最后一个是使用“创建另一个客户端 ID ...”->“已安装的应用程序”->“Android”创建的。我已经使用了 ~/.android/debug.keystore 中的密钥。

  • 我还尝试为“其他”(而不是 Android/iOS)安装的应用程序创建一个密钥,但这给了我一个客户端 ID 和客户端密码。Drive 对象似乎不接受客户端密码。

  • 在代码显示“1234567890-abcdefghij123klmnop.apps.googleusercontent.com”的地方,我尝试同时使用“API 密钥”和“客户端 ID”,都给出了相同的错误。

我的代码:

Account account = AccountManager.get(context).getAccountsByType(
        "com.google")[0];

String token;
try {
    token = GoogleAuthUtil.getToken(context, account.name, "oauth2:"
            + DriveScopes.DRIVE_FILE);
} catch (UserRecoverableAuthException e) {
    context.startActivityForResult(e.getIntent(), ASK_PERMISSION);
    return;
} catch (IOException e) {
    return;
} catch (GoogleAuthException e) {
    return;
}

HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null);
final String tokenCopy = token;
b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
    public void initialize(JsonHttpRequest request) throws IOException {
        DriveRequest driveRequest = (DriveRequest) request;
        driveRequest.setPrettyPrint(true);
        driveRequest
                .setKey("1234567890-abcdefghij123klmnop.apps.googleusercontent.com");
        driveRequest.setOauthToken(tokenCopy);
    }
});

final Drive drive = b.build();
FileList files;
try {
    files = drive.files().list().setQ("mimeType=text/plain").execute();
} catch (IOException e) {
    e.printStackTrace(); // throws HTTP 400
}

我得到的错误是:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "location" : "q",
    "locationType" : "parameter",
    "message" : "Invalid Value",
    "reason" : "invalid"
  } ],
  "message" : "Invalid Value"
}
4

1 回答 1

1

正如错误消息所暗示的,您的错误在查询参数q中。q您的参数的正确语法是

files = drive.files().list().setQ("mimeType='text/plain'").execute();

并不是 :

files = drive.files().list().setQ("mimeType=text/plain").execute();

查看您的代码,您已完全通过身份验证,并且由于此语法错误,您的请求失败。

于 2012-10-18T19:37:31.043 回答