Android Google驱动器文件下载
我正在尝试使用下面提到的代码从google drive下载文件。 我已经成功地测试了其他方法,如插入文件、删除文件上载文件,但在尝试下载文件时,我在下面的代码中的HttpResponse response=request.execute()处收到401授权错误Android Google驱动器文件下载,android,google-drive-api,Android,Google Drive Api,我正在尝试使用下面提到的代码从google drive下载文件。 我已经成功地测试了其他方法,如插入文件、删除文件上载文件,但在尝试下载文件时,我在下面的代码中的HttpResponse response=request.execute()处收到401授权错误 private static synchronized InputStream downloadFile(Drive service, File file) throws IOException { //File
private static synchronized InputStream downloadFile(Drive service, File file) throws IOException
{
//File file = service.files().get(fileId).execute();
String fileURL = file.getDownloadUrl();
GenericUrl genericUrl = new GenericUrl(fileURL);
if (fileURL != null && fileURL.length() > 0)
{
try {
HttpRequest request = service.getRequestFactory().buildGetRequest(genericUrl);
HttpResponse response = request.execute();
InputStream inStream = response.getContent();
//HttpResponse resp = service.getRequestFactory().buildGetRequest(url).execute();
System.out.println("content "+ inStream);
return inStream;
} catch (IOException e) {
// An error occurred.
e.printStackTrace();
System.out.println("downloadFile error :"+ e.getMessage());
return null;
}
} else {
// The file doesn't have any content stored on Drive.
return null;
}
}
我也尝试过使用异步实现,但我仍然得到了401错误
08-30 19:31:13.917: W/System.err(1585): com.google.api.client.http.HttpResponseException: 401 Unauthorized
08-30 19:31:13.925: W/System.err(1585): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:978)
08-30 19:31:13.935: W/System.err(1585): at com.rise.risedrive.RiseDriveActivity$DownloadFile.doInBackground(RiseDriveActivity.java:112)
08-30 19:31:13.945: W/System.err(1585): at com.rise.risedrive.RiseDriveActivity$DownloadFile.doInBackground(RiseDriveActivity.java:1)
08-30 19:31:13.955: W/System.err(1585): at android.os.AsyncTask$2.call(AsyncTask.java:185)
08-30 19:31:13.955: W/System.err(1585): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
08-30 19:31:13.965: W/System.err(1585): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
08-30 19:31:13.965: W/System.err(1585): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-30 19:31:13.975: W/System.err(1585): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-30 19:31:13.975: W/System.err(1585): at java.lang.Thread.run(Thread.java:1019)
08-30 19:31:32.250: W/jdwp(1585): Debugger is telling the VM to exit with code=1
08-30 19:31:32.250: I/dalvikvm(1585): GC lifetime allocation: 2603 bytes
我试过调试它,但无法
帮我解决这个问题
提前感谢您的代码中没有设置授权标头的地方 你需要像这样的东西
setRequestProperty("Authorization", "OAuth " + "***ACCESS_TOKEN***");
对于任何401/403错误,让您的请求在Oauth游乐场上运行是非常值得的,这样您就有了构建应用程序的数据。您可以打印错误消息吗?您可以了解有关如何从中捕获错误的更多信息。凭据可能已过期,或者用户可能已吊销对您的应用程序的访问权限。
service.getRequestFactory().buildGetRequest()
应在内部执行此操作。