【发布时间】:2016-06-24 11:47:32
【问题描述】:
我需要获取在我的驱动器中创建的文件夹的 resourceId。 参考了这些文档 first 和 second 我正在这样做:
private void CreateFolderOnGoogleDrive() {
Query query = new Query.Builder()
.addFilter(Filters.and(Filters.eq(
SearchableField.TITLE, "Folder"),
Filters.eq(SearchableField.TRASHED, false)))
.build();
Drive.DriveApi.query(mGoogleApiClient, query)
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult result) {
if (!result.getStatus().isSuccess()) {
System.out.println("Cannot create folder in the root.");
} else {
boolean isFound = false;
for (Metadata m : result.getMetadataBuffer()) {
if (m.getTitle().equals("Folder")) {
Toast.makeText(getApplicationContext(), "folder exist", Toast.LENGTH_LONG).show();
isFound = true;
break;
}
}
if (!isFound) {
System.out.println("Folder not found; creating it.");
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("Folder")
.build();
Drive.DriveApi.getRootFolder(mGoogleApiClient)
.createFolder(mGoogleApiClient, changeSet)
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(DriveFolder.DriveFolderResult result) {
if (!result.getStatus().isSuccess()) {
System.out.println("Error while trying to create the folder");
} else {
System.out.println("Created a folder");
}
}
System.out.println(result.getDriveFolder().getDriveId().getResourceId());
// ALWAYS return as null
});
}
}
}
});
通过这段代码,我得到了 result 中的每个值,除了 getResourceId()(当我通过代码获取它时它总是为空)。
我什至可以在驱动器 url 中看到我的文件夹 ID。
已经做了很多研究,但没有一个给出任何解决方案。他们只给出了原因。
有人解决了吗?
【问题讨论】:
-
我没有遇到过这个特殊的问题,尽管我已经阅读了资源 ID 的分配可以延迟的地方。看看stackoverflow.com/questions/22874657/…。
-
是的,但我猜它不能延迟一整天。
-
我看到您试图获取资源 ID 的唯一地方是在创建文件夹的
onResult回调中。此调用将始终在创建文件夹后立即发生,因此由于 GDAA 可能尚未同步,您可能会期望资源 id 的分配延迟。你是说24小时后用另一段代码(不是你贴的)检查文件夹的资源id,资源id还是null? -
我已将 driveId 放入共享 Pref 并再次获取它们,但仍然为空。甚至在间隔后尝试了一个线程
标签: android google-drive-android-api