如何使用Google Drive Android API删除Google云端硬盘上的文件

时间:2014-03-10 09:05:48

标签: java android google-api google-drive-api google-drive-android-api

我是Google Drive Android API的新手,我正在学习它。但我遇到的问题是我无法使用Google Drive Android API删除文件,但没有一个例子。 anybood可以帮我解决这个问题吗?非常感谢。

5 个答案:

答案 0 :(得分:5)

更新(2015年4月)
GDAA最终拥有自己的“trash”功能,将答案提供给IRRELEVANT。

原文回答:
正如谢丽尔上面提到的,你可以将这两个API结合起来。

以下代码段摘自here,展示了如何完成此操作:

首先,您可以访问 GoogleApiClient ... services.drive.Drive

GoogleApiClient _gac;
com.google.api.services.drive.Drive _drvSvc;

public void init(MainActivity ctx, String email){
  // build GDAA  GoogleApiClient
  _gac = new GoogleApiClient.Builder(ctx).addApi(com.google.android.gms.drive.Drive.API)
        .addScope(com.google.android.gms.drive.Drive.SCOPE_FILE).setAccountName(email)
        .addConnectionCallbacks(ctx).addOnConnectionFailedListener(ctx).build();

  // build RESTFul (DriveSDKv2) service to fall back to for DELETE
  com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential crd =
  GoogleAccountCredential
    .usingOAuth2(ctx, Arrays.asList(com.google.api.services.drive.DriveScopes.DRIVE_FILE));
  crd.setSelectedAccountName(email);
  _drvSvc = new com.google.api.services.drive.Drive.Builder(
          AndroidHttp.newCompatibleTransport(), new GsonFactory(), crd).build();
}

其次,在GDAA的DriveId上实现RESTful API调用:

public void trash(DriveId dId) {
  try {
    String fileID =  dId.getResourceId();
      if (fileID != null)
        _drvSvc.files().trash(fileID).execute();
  } catch (Exception e) {} 
}

public void delete(DriveId dId) {
  try {
    String fileID = dId.getResourceId();
      if (fileID != null)
        _drvSvc.files().delete(fileID).execute();
  } catch (Exception e) {} 
}

...瞧,你要删除你的文件。像往常一样,并非没有问题。

首先,如果您在创建文件后立即尝试删除文件, getResourceId()将落在其面上,返回 null 。与这里的问题无关,我要提出一个问题。

第二,很难!并且不应该在代码中保留TRDA和DELETE功能的GDAA实现。

答案 1 :(得分:1)

尚不支持删除文件。你总是可以回到使用RESTful API来做这样的事情。

答案 2 :(得分:1)

要删除,可以使用以下代码。然后使用createFile将新文件复制到驱动器上。

    private void deleteFile(DriveFile file) {
        // [START drive_android_delete_file]
        getDriveResourceClient()
            .delete(file)
            .addOnSuccessListener(this, aVoid -> {
                Log.e(TAG, "File Deleted");
            })
            .addOnFailureListener(this, e -> {
                Log.e(TAG, "Unable to delete file", e);
                showMessage(getString(R.string.delete_failed));
            });
    }

答案 3 :(得分:0)

https://developers.google.com/drive/v2/reference/files/delete

您需要file-id来删除文件和服务实例:

import com.google.api.services.drive.Drive;

... 

private static void deleteFile(Drive service, String fileId) {
    try {
      service.files().delete(fileId).execute();
    } catch (IOException e) {
      System.out.println("An error occurred: " + e);
    }
  }

答案 4 :(得分:0)

使用DriveResource.delete()方法从Google Play服务7.5开始,Google Drive Android API支持删除。

我们建议将垃圾用于用户可见文件而不是删除,以便用户有机会恢复任何意外删除的内容。删除是永久性的,仅建议用于无法使用垃圾箱的应用程序文件夹内容。