【问题标题】:How to delete a file on google drive using Google Drive Android API如何使用 Google Drive Android API 删除 Google Drive 上的文件
【发布时间】:2014-03-10 09:05:47
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    更新(2015 年 4 月)
    GDAA 终于有了自己的“trash”功能,将答案呈现在 IRRELEVANT 之下。

    原始答案:
    正如前面提到的 Cheryl,您可以将这两个 API 结合起来。

    以下代码 sn-p 取自 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。与这里的问题无关,我会就此提出一个问题。

    第二,IT IS A HACK!,它不应该留在您的代码中,超过 GDAA 实现的 TRASH 和 DELETE 功能。

    【讨论】:

    • 我应该补充一下,这个黑客还有另一个问题。以这种方式删除/删除文件/文件夹后,如果您通过 GDAA 处理它(查询,使用它的资源 ID,...),它将显示为 VALID/ALIVE,因为它由 Google Play 服务缓存。因此,您的应用程序可能正在写入文件/在不再存在的文件夹中创建对象。并且“刷新”延迟可能相当长(数小时)。
    • 这还能用吗? GoogleAccountCredential 在哪里?和AndroidHttp?谢谢
    • 可以,但要注意延迟。我设法删除了 RESTful 中的文件/文件夹,之后 GDAA 没有给我任何警告,所以我可以写入已删除/不存在的文件,甚至在已删除的文件夹中创建新文件。 RESful(或 Drive web)中有 2 个级别的删除,TRASH 和 DELETE。 GDAA 中都没有准确报告。您实际上可以将此处的代码插入到 Github (github.com/seanpjanson/GDAADemo) 上的这个演示中,并使用它来查看陷阱。凭证/授权的东西就在那里((MainActivity)。见 SO 28439129。
    • 如果可能,请发送电子邮件 :-) 感谢您提供的信息。
    • 请看我在 github 开始的问题之一
    【解决方案2】:

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

    【讨论】:

    • 应该,因为您只需要文件的 id 即可将其删除,并在您的示例中获得 id。
    • @Alexander_Winter 我知道,但是当我使用 Google Drive Android API 授权方式时如何构造一个对象“设备”? mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build();
    • 其实这个答案也是正确的,只是它没有提到如何获取'fileId'。它必须来自 DriveId.getResourceId() 正如我在此处的回答中提到的那样。
    【解决方案3】:

    尚不支持文件删除。对于此类事情,您始终可以退回到使用 RESTful API。

    【讨论】:

      【解决方案4】:

      要删除,您可以使用以下代码。然后使用 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));
                  });
          }
      

      【讨论】:

        【解决方案5】:

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

        我们建议对用户可见的文件使用回收站而不是删除,以便让用户有机会恢复任何意外丢弃的内容。删除是永久性的,建议仅用于应用文件夹内容,其中垃圾不可用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-07
          • 1970-01-01
          • 1970-01-01
          • 2022-08-20
          • 1970-01-01
          相关资源
          最近更新 更多