【发布时间】: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
我是 Google Drive Android API 的新手,我正在学习它。但是我遇到了一个问题,我无法使用 Google Drive Android API 删除文件,没有示例。任何人都可以帮我解决这个问题吗?非常感谢。
【问题讨论】:
标签: java android google-api google-drive-api google-drive-android-api
更新(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 功能。
【讨论】:
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);
}
}
【讨论】:
mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build();
尚不支持文件删除。对于此类事情,您始终可以退回到使用 RESTful API。
【讨论】:
要删除,您可以使用以下代码。然后使用 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));
});
}
【讨论】:
从 Google Play 服务 7.5 开始,Google Drive Android API 支持使用 DriveResource.delete() 方法删除。
我们建议对用户可见的文件使用回收站而不是删除,以便让用户有机会恢复任何意外丢弃的内容。删除是永久性的,建议仅用于应用文件夹内容,其中垃圾不可用。
【讨论】: