0

GoogleのGoogleDriveSDK(v2-rev57-1.13.2-beta)を使用して、Google独自の形式をエクスポートしようとしています。非独自の形式を問題なくダウンロードできます。

ファイルのパスを取得するために、ドキュメントには次のように記載されています。

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

(たとえば)GoogleドキュメントをMSWordドキュメントとしてエクスポートします。これを行うと、明らかに有効なURLになります。(これも「text / plain」で試しましたが、同じ結果になりました)。

ただし、そのパスからダウンロードしようとすると、Googleドライブ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を変更することを検討していますが、誰かがすでにこの問題に遭遇していないかどうかを確認したいと思いました(そしておそらく解決策を見つけました)。

ありがとう

4

1 に答える 1

1

更新された回答:

私は最初の質問を完全に読んでおらず、これがGoogleネイティブ形式のドキュメントでのみ発生することに気づきませんでした。

ドキュメントの有効なエクスポートリンクを取得したら、承認されたGETリクエストを作成する必要があります。これを行うためのコードは、以下のスニペットのコードと似ていfiles.getます。ダウンロードURLをエクスポートURLに置き換える必要があります。

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;
  }
}

古い答え(無視してください):

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渡すインスタンスdownloadFileが正しく許可されていることを確認してください。

このコードを使用していて、サービスが正しく承認されていることが確実な場合は、アプリから送信されたHTTPリクエストと対応するレスポンスを表示してください。

于 2013-03-11T21:55:11.367 に答える