我正在尝试使用新的Google云端硬盘Android API来确定如何检查Google云端硬盘中是否存在文件夹
我已经尝试了以下内容,认为如果找不到文件夹它会崩溃或返回null,但它不会这样做(只要它是有效的DriveId,即使文件夹已被删除).
DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), driveId));
Run Code Online (Sandbox Code Playgroud)
如果我尝试创建一个文件,我从上面的代码中得到的文件夹,它也不会崩溃?我显然很难理解这个新API是如何一起工作的,尤其是那些非常有限的教程和SO问题,我真的坚持这个,所以任何输入都将非常感激.
只是为了澄清我的问题:我在指定的Google云端硬盘文件夹中创建了一个文件,但如果该文件夹不存在(已被用户删除),我想先创建它.
问题是来自' DriveId.getResourceId() ' 的'resourceID' 在新创建的文件(' DriveFolder.createFile(GAC,meta,cont) '的产品)上不可用(返回NULL ).如果通过常规列表或查询过程检索文件,则'resourceID'是正确的.
我怀疑这是一个时间/延迟问题,但目前尚不清楚是否存在强制刷新的应用程序操作." Drive.DriveApi.requestSync(GAC) "似乎没有任何效果.
运行下面的代码,我在平板电脑上创建了一个包含Google Drive Android API的文件夹.几秒钟后,从PC上的远程位置删除该文件夹.当我重新运行代码时,API仍然认为"MyFolder"存在,即使它已被删除且在平板电脑上的Google云端硬盘应用中不可见.文件夹持久性最终会在一段时间后消失,代码按预期工作.这是云驱动器的预期行为吗?
Query query = new Query.Builder()
.addFilter(Filters.and(Filters.eq(
SearchableField.TITLE, "MyFolder"),
Filters.eq(SearchableField.TRASHED, false)))
.build();
Drive.DriveApi.query(getGoogleApiClient(), query)
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult result) {
if (!result.getStatus().isSuccess()) {
showMessage("Cannot create folder in the root.");
} else {
boolean isFound = false;
for(Metadata m : result.getMetadataBuffer()) {
if(!isFound) {
if (m.getTitle().equals("MyFolder")) {
showMessage("Folder exists");
isFound = true;
}
}
}
if(!isFound) {
showMessage("Folder not found; creating it.");
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("MyFolder")
.build();
Drive.DriveApi.getRootFolder(getGoogleApiClient())
.createFolder(getGoogleApiClient(), changeSet)
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() { …Run Code Online (Sandbox Code Playgroud)