NullPointer尝试导出Google Doc

时间:2013-02-26 01:16:40

标签: java google-drive-api

使用Google的Google Drive SDK(v2-rev57-1.13.2-beta),我正在尝试导出Google的专有格式。我可以下载非专有格式。

要获取文件的路径,documentation说要调用:

com.google.api.services.drive.model.File.getExportLinks("application/vnd.openxmlformats-officedocument.wordprocessingml.document") 

将Google文档导出(例如)作为MS Word文档。这样做会产生一个明显有效的URL。 (我也尝试过“text / plain”,结果相同)。

但是,当我尝试从该路径下载时,Google Drive SDK会在内部抛出NullPointerException:

java.lang.NullPointerException
at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:194)
at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:150)
at com.redacted.mycode.GoogleDocsConnection.download(GoogleDocsConnection.java:182)
...

还有其他人在体验这个吗?我正在考虑自己修改Google的SDK,但我想知道是否有人遇到过这个问题(也许还有一个解决方案)。

由于

1 个答案:

答案 0 :(得分:1)

更新的答案:

我没有彻底阅读最初的问题,也没有注意到只有Google原生格式的文档会发生这种情况。

获得文档的有效导出链接后,您必须构建授权的GET请求。这样做的代码类似于下面files.get代码段中的代码,您只需要使用导出网址替换下载网址:

private static InputStream downloadFile(Drive service, String exportUrl) {
  try {
    HttpResponse resp =
        service.getRequestFactory()
            .buildGetRequest(new GenericUrl(exportUrl))
            .execute();
    return resp.getContent();
  } catch (IOException e) {
    // An error occurred.
    e.printStackTrace();
    return null;
  }
}

OLD ANSWER(请忽略):

NullPointer异常可能是由未经授权的初始下载请求引起的。以下代码显示了如何从云端硬盘下载文件:

private static InputStream downloadFile(Drive service, File file) {
  if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
    try {
      HttpResponse resp =
          service.getRequestFactory()
              .buildGetRequest(new GenericUrl(file.getDownloadUrl()))
              .execute();
      return resp.getContent();
    } catch (IOException e) {
      // An error occurred.
      e.printStackTrace();
      return null;
    }
  } else {
    // The file doesn't have any content stored on Drive.
    return null;
  }
}

只需确保您传递给service的{​​{1}}个实例已获得正确授权。

如果您使用此代码且确定您的服务已获得正确授权,请显示您的应用发送的HTTP请求以及相应的响应。