Java 我无法使用google drive下载文件内容
我正试图用google drive下载google文档文件,但我一直收到状态消息:状态{statusCode=此文件没有可用内容,分辨率=null}。对于我尝试下载的任何文件,此问题都会持续存在。我下载的文件不是空的,里面有文本。这是处理GoogleDrive的类Java 我无法使用google drive下载文件内容,java,android,google-drive-api,google-drive-android-api,Java,Android,Google Drive Api,Google Drive Android Api,我正试图用google drive下载google文档文件,但我一直收到状态消息:状态{statusCode=此文件没有可用内容,分辨率=null}。对于我尝试下载的任何文件,此问题都会持续存在。我下载的文件不是空的,里面有文本。这是处理GoogleDrive的类 package com.parse.starter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRead
package com.parse.starter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.drive.Drive;
import com.google.android.gms.drive.DriveApi.DriveContentsResult;
import com.google.android.gms.drive.DriveContents;
import com.google.android.gms.drive.DriveFile;
import com.google.android.gms.drive.DriveFile.DownloadProgressListener;
import com.google.android.gms.drive.DriveId;
import com.google.android.gms.drive.OpenFileActivityBuilder;
public class WriteScreen extends ActionBarActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
GoogleApiClient mGoogleApiClient;
private DriveId mSelectedFileDriveId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_write_screen);
mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(Drive.API)
.addScope(Drive.SCOPE_FILE).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
private ResultCallback<DriveContentsResult> contentsOpenedCallback = new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
// display an error saying file can't be opened
System.out.println("error : " + result.getStatus());
return;
}
// DriveContents object contains pointers
// to the actual byte stream
DriveContents contents = result.getDriveContents();
BufferedReader reader = new BufferedReader(new InputStreamReader(
contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String contentsAsString = builder.toString();
}
};
@Override
protected void onActivityResult(final int requestCode,
final int resultCode, final Intent data) {
switch (requestCode) {
case 5:
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
}
break;
case 6:
if (resultCode == RESULT_OK) {
mSelectedFileDriveId = (DriveId) data
.getParcelableExtra(OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,
mSelectedFileDriveId);
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY,
new DownloadProgressListener() {
@Override
public void onProgress(long bytesDownloaded,
long bytesExpected) {
// Update progress dialog with the latest
// progress.
int progress = (int) (bytesDownloaded * 100 / bytesExpected);
Log.d("Tag", String.format(
"Loading progress: %d percent",
progress));
}
}).setResultCallback(contentsOpenedCallback);
}
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void onConnected(Bundle result) {
System.out.println("Connection passed");
}
@Override
public void onConnectionSuspended(int arg0) {
}
@Override
public void onConnectionFailed(ConnectionResult result) {
System.out.println("Connection failed: " + result);
if (result.hasResolution()) {
try {
result.startResolutionForResult(this, 5);
} catch (IntentSender.SendIntentException e) {
// Unable to resolve, message user appropriately
}
} else {
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this,
0).show();
}
}
public void open(View view) {
fileOpen();
}
public void publish(View view) {
IntentSender intentSender = Drive.DriveApi
.newOpenFileActivityBuilder()
.setMimeType(
new String[] { "application/vnd.google-apps.document",
"text/plain" }).build(mGoogleApiClient);
try {
startIntentSenderForResult(intentSender, 6, null, 0, 0, 0);
} catch (SendIntentException e) {
System.out.println("publish failed: " + e);
}
}
private void fileOpen() {
Intent intent = getPackageManager().getLaunchIntentForPackage(
"com.google.android.apps.docs.editors.docs");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent);
} catch (Exception e) {
System.out.println(e);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.write_screen, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return super.onOptionsItemSelected(item);
}
}
package com.parse.starter;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入android.content.Intent;
导入android.content.IntentSender;
导入android.content.IntentSender.SendIntentException;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入com.google.android.gms.common.ConnectionResult;
导入com.google.android.gms.common.GooglePlayServicesUtil;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.common.api.GoogleAppClient.ConnectionCallbacks;
导入com.google.android.gms.common.api.GoogleAppClient.OnConnectionFailedListener;
导入com.google.android.gms.common.api.ResultCallback;
导入com.google.android.gms.drive.drive;
导入com.google.android.gms.drive.DriveApi.DriveContentsResult;
导入com.google.android.gms.drive.DriveContents;
导入com.google.android.gms.drive.DriveFile;
导入com.google.android.gms.drive.DriveFile.DownloadProgressListener;
导入com.google.android.gms.drive.DriveId;
导入com.google.android.gms.drive.OpenFileActivityBuilder;
公共类WriteScreen扩展了ActionBarActivity实现
ConnectionCallbacks,OnConnectionFailedListener{
GoogleapClient MGoogleapClient;
私有驱动器ID mSelectedFileDriveId;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u write\u屏幕);
mGoogleApiClient=new-GoogleApiClient.Builder(this.addApi)(Drive.API)
.addScope(Drive.SCOPE\u文件).addConnectionCallbacks(此)
.addOnConnectionFailedListener(this.build();
}
@凌驾
受保护的void onStart(){
super.onStart();
mGoogleApiClient.connect();
}
私有ResultCallback contentsOpenedCallback=新ResultCallback(){
@凌驾
public void onResult(DriveContentsResult结果){
如果(!result.getStatus().issucess()){
//显示一个错误,说明无法打开文件
System.out.println(“错误:+result.getStatus());
回来
}
//DriveContents对象包含指针
//到实际的字节流
DriveContents=result.getDriveContents();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
contents.getInputStream());
StringBuilder=新的StringBuilder();
弦线;
试一试{
而((line=reader.readLine())!=null){
builder.append(行);
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
字符串contentsAsString=builder.toString();
}
};
@凌驾
受保护的无效onActivityResult(最终整数请求代码,
最终int结果代码,最终意图数据){
开关(请求代码){
案例5:
if(resultCode==RESULT\u OK){
mGoogleApiClient.connect();
}
打破
案例6:
if(resultCode==RESULT\u OK){
mSelectedFileDriveId=(DriveId)数据
.getParcelableExtra(OpenFileActivityBuilder.EXTRA\u响应\u驱动器\u ID);
DriveFile file=Drive.DriveApi.getFile(mGoogleApiClient,
mSelectedFileDriveId);
file.open(mGoogleApiClient、DriveFile.MODE\u只读、,
新下载ProgressListener(){
@凌驾
公共void onProgress(长字节),
长时间(预计){
//使用最新版本更新进度对话框
//进步。
int进度=(int)(字节下载*100/字节预期);
Log.d(“标记”,String.format(
“加载进度:%d%,
进展),;
}
}).setResultCallback(contentsPenedCallback);
}
违约:
super.onActivityResult(请求代码、结果代码、数据);
}
}
@凌驾
未连接的公共空间(捆绑结果){
System.out.println(“连接已通过”);
}
@凌驾
连接上的公共无效已暂停(int arg0){
}
@凌驾
连接失败的公共void(连接结果){
System.out.println(“连接失败:+结果”);
if(result.hasResolution()){
试一试{
result.StartResult的解决方案(这个,5);
}catch(IntentSender.sendtintentexe){
//无法解析消息,请与用户联系
}
}否则{
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),此,
0)show();
}
}
公共作废打开(视图){
fileOpen();
}
公共作废发布(视图){
IntentSender IntentSender=Drive.DriveApi
.newOpenFileActivityBuilder()
.setMimeType(
新字符串[]{“application/vnd.google apps.document”,