【发布时间】:2018-04-07 16:11:50
【问题描述】:
我有一个 Android 应用程序,有时需要在 Google Drive 上创建和删除一些文本文件,并下载/获取这些文件的内容以在活动中显示它。 因此,一段时间以来,我一直在尝试寻找一种仅使用文件名来执行此操作的方法,但是在查找有关如何操作的信息时似乎遇到了很多问题。此外,不是 Java 开发人员并不会让事情变得更容易。
我设法在根文件夹中创建了一个文件:
private void createFile()
{
println("CreateFileActivity > createFile");
final Task<DriveFolder> rootFolderTask = getDriveResourceClient().getRootFolder();
final Task<DriveContents> createContentsTask = getDriveResourceClient().createContents();
Tasks.whenAll(rootFolderTask, createContentsTask)
.continueWithTask(task -> {
DriveFolder parent = rootFolderTask.getResult();
DriveContents contents = createContentsTask.getResult();
OutputStream outputStream = contents.getOutputStream();
try (Writer writer = new OutputStreamWriter(outputStream))
{
writer.write("SOME_TEXT_HERE");
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("MyFile.txt")
.setMimeType("text/plain")
.setStarred(true)
.build();
return getDriveResourceClient().createFile(parent, changeSet, contents);
})
.addOnSuccessListener(this,
driveFile -> {
System.out.println("File created");
Intent resultActvityIntent = new Intent(getApplicationContext(), ResultActivity.class);
startActivity(resultActvityIntent);
})
.addOnFailureListener(this, e -> {
Toast.makeText(this, "Unable to create file", Toast.LENGTH_SHORT).show();
System.out.println("Unable to create file");
Log.e(TAG, "Unable to create file", e);
Intent resultActvityIntent = new Intent(getApplicationContext(), ResultActivity.class);
startActivity(resultActvityIntent);
});
}
但令我惊讶的是,它每次都会创建一个具有相同名称的新文件,而不是覆盖它。
此外,我似乎无法仅使用文件名删除文件或下载文件/分级内容。 我找到了很多关于如何使用文件 ID 删除文件的信息,还找到了 Google 提供的示例,但这并不是我真正需要的。
@Override
protected void onDriveClientReady()
{
pickTextFile()
.addOnSuccessListener(this,
driveId -> deleteFile(driveId.asDriveFile()))
.addOnFailureListener(this, e -> {
Log.e(TAG, "No file selected", e);
showMessage(getString(R.string.file_not_selected));
finish();
});
}
private void deleteFile(DriveFile file)
{
// [START delete_file]
getDriveResourceClient()
.delete(file)
.addOnSuccessListener(this,
aVoid -> {
showMessage(getString(R.string.file_deleted));
finish();
})
.addOnFailureListener(this, e -> {
Log.e(TAG, "Unable to delete file", e);
showMessage(getString(R.string.delete_failed));
finish();
});
// [END delete_file]
}
关于如何做到这一点或从哪里开始寻找任何想法? 或者无法直接从应用内删除文件?
【问题讨论】:
标签: java android google-api kotlin google-drive-api