【发布时间】:2018-06-22 23:40:02
【问题描述】:
这是我第一次使用 Drive 和 Sheets API,我对在创建新文件时应该使用哪个 API 感到困惑。我希望创建一个空白的 google 表格文件,保存在驱动器上,以后可以通过编程方式对其进行编辑。据我了解,Drive API 用于基本的文件操作;例如创建、删除和移动文件。而 Sheets API 用于更直接的电子表格操作;正在写入数据、格式化等。因此,要创建一个新的电子表格文件,逻辑告诉我 Drive API 将创建我想要的电子表格。由于这里的大多数问题都使用旧版本的 Drive API,因此很难(至少对我而言)将这些流程转换到新 API。
我一直遵循Drive API documentation 上提供的指南。因为我正在创建一个空工作表文件,所以我通过将 initial drive contents 设置为 null 来更改代码,同时与示例保持一致。 :
CreateFileActivityOptions createOptions =
new CreateFileActivityOptions.Builder()
.setInitialDriveContents(null)
.setInitialMetadata(changeSet)
.build();
return getDriveClient().newCreateFileActivityIntentSender(createOptions);
这是我用来尝试创建文件的完整方法:
private void saveFileToDrive(){
Log.i(TAG, "Creating the new file");
DriveResourceClient mDriveResourceClient;
mDriveResourceClient =Drive
.getDriveResourceClient(this,GoogleSignIn.getLastSignedInAccount(this));
mDriveResourceClient.createContents()
.continueWithTask(new Continuation<DriveContents, Task<Void>>() {
@Override
public Task<Void> then(@NonNull Task<DriveContents> task) throws Exception {
return createFileIntentSender(task.getResult());
};
});
}
private Task<Void> createFileIntentSender(DriveContents driveContents){
Log.i(TAG, "New file being created");
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("New file.xls")
.setMimeType("application/vnd.google-apps.spreadsheet")
.setStarred(true)
.build();
CreateFileActivityOptions createOptions =
new CreateFileActivityOptions.Builder()
.setInitialDriveContents(null)
.setInitialMetadata(changeSet)
.build();
return mDriveClient.newCreateFileActivityIntentSender(createOptions)
.continueWith(
new Continuation<IntentSender, Void>() {
@Override
public Void then(@NonNull Task<IntentSender> task) throws Exception {
return null;
}
}
);
}
我已将 Mime 类型更改为 application/vnd.google-apps.spreadsheet,以便创建的新文件是电子表格。我不明白的是,当我直接实现 API 文档中的示例代码时,代码会始终创建一个文件。为什么它不会创建电子表格?有什么我遗漏的吗?
Sheets API 也有一个 create 方法来创建一个新的电子表格。这是要遵循的正确方法,而不是通过 Drive API?
【问题讨论】:
-
您是否尝试过手动创建电子表格文件,然后看到与该文件关联的元数据正在使用获取请求?
-
我实际上正在考虑下一步。目前,我正在使用Drive 的 REST API 并以这种方式创建文件。它涉及更多,我还没有得到有意义的结果。
-
谢谢。如果收到请报告。
-
我目前正在使用this documentation。具体来说,我正在使用 AsyncTask 创建新文件。在 doInBackground 中,我正在调用一个方法来创建文件,该方法类似于主要方法 here。我得到一个 IOExeption 并且不知道如何解决它....
-
我能体会到我离做对有多近了。在我的 doInBackground 方法中,我现在只是无法获取与 GoogleAccountCredential 关联的令牌。我会继续研究这个
标签: android google-sheets google-drive-api google-spreadsheet-api