上传文件到谷歌驱动器失败

时间:2014-09-16 05:51:02

标签: android google-drive-api

将文件从Android上传到Google云端硬盘失败。似乎createFile即使返回的状态成功也无法正常工作。我从Google API获得的实际状态错误代码和消息是错误代码8,错误消息:提供的DriveId无效

我也无法在相关用户的Google云端硬盘上找到该文件(使用Google云端硬盘的网页界面)。

我也尝试在创建文件回调中使用Drive.DriveApi.fetchDriveId(m_api, m_file.getDriveId().toString())(而不是调用openContents),它也失败了。

相关代码如下,任何帮助将不胜感激!

public void createFile() {
  Drive.DriveApi.newContents(m_api).setResultCallback(contentsCallback);
}

final private ResultCallback<ContentsResult> contentsCallback = new ResultCallback<ContentsResult>() {
  @Override
  public void onResult(ContentsResult result) {
    if (handleError(result.getStatus())) {
      return;
    }

    Contents contents = result.getContents();
    MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
        .setTitle("aaab").setMimeType("text/plain")
        .setStarred(true).build();

    // create a file on root folder
    Drive.DriveApi.getRootFolder(m_api)
        .createFile(m_api, changeSet, contents)
        .setResultCallback(fileCallback);
  }

};

final private ResultCallback<DriveFileResult> fileCallback = new ResultCallback<DriveFileResult>() {
  @Override
  public void onResult(DriveFileResult result) {
    if (handleError(result.getStatus())) {
      return;
    }
    m_file = result.getDriveFile();

    m_file.openContents(m_api, DriveFile.MODE_READ_ONLY, null)
        .setResultCallback(updateCallback);
  }
};

final private ResultCallback<ContentsResult> updateCallback = new ResultCallback<ContentsResult>() {
  @Override
  public void onResult(ContentsResult result) {
    // Getting error here
    if (handleError(result.getStatus())) {
      return;
    }

...

2 个答案:

答案 0 :(得分:0)

好的问题是没有创建新文件。 用于在GoogleDrive上创建新文件我使用此代码并且工作正常,问题出在您的googleapiclient中,或者我不知道您在何处以及如何调用您的函数createFile()。您必须调用onConnected metode。

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    // create new contents resource
    Drive.DriveApi.newContents(m_api)
            .setResultCallback(contentsCallback);
}

final private ResultCallback<ContentsResult> contentsCallback = new
        ResultCallback<ContentsResult>() {
    @Override
    public void onResult(ContentsResult result) {
        if (!result.getStatus().isSuccess()) {
            showMessage("Error while trying to create new file contents");
            return;
        }

        MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                .setTitle("New file")
                .setMimeType("text/plain")
                .setStarred(true).build();
        // create a file on root folder
        Drive.DriveApi.getRootFolder(m_api)
                .createFile(m_api, changeSet, result.getContents())
                .setResultCallback(fileCallback);
    }
};

final private ResultCallback<DriveFileResult> fileCallback = new
        ResultCallback<DriveFileResult>() {
    @Override
    public void onResult(DriveFileResult result) {
        if (!result.getStatus().isSuccess()) {
            showMessage("Error while trying to create the file");
            return;
        }
        showMessage("Created a file: " + result.getDriveFile().getDriveId());
    }
};

答案 1 :(得分:0)

我修好了! 它有两个问题:

第一个问题是我的错 - 我的Android清单缺少驱动服务的APP_ID:

<meta-data
    android:name="com.google.android.apps.drive.APP_ID"
    android:value="@string/app_id" />

其次,该活动正在扩展预定义的Google类:BaseGameActivity。 但是这个类假设我没有使用谷歌驱动器文件。为了使它工作,我不得不在我的活动中添加它:

    mRequestedClients = GameHelper.CLIENT_ALL;

并更改Google预定义代码。实际上它看起来像谷歌的一个错误,假设总是使用谷歌APP文件夹,而不是谷歌驱动器文件。在GameHelper.java,第298行,来自:

builder.addScope(Drive.SCOPE_APPFOLDER);

到:

builder.addScope(Drive.SCOPE_FILE);
相关问题