Filters.ownedByMe无法在“Android版Drive API”中使用(但在“API Client Library for Java”中正常使用)
以前,我正在使用“API Client Library for Java”在appdata文件夹中执行文件搜索。
在API Client Library for Java中搜索代码
private static void searchFromGoogleDrive(Drive drive, String qString) { try { Files.List request = drive.files().list().setQ(qString); do { FileList fileList = request.execute(); for (com.google.api.services.drive.model.File f : fileList.getItems()) { final String title = f.getTitle(); if (title == null || f.getDownloadUrl() == null || f.getDownloadUrl().length() 0); } catch (IOException ex) { log.error(null, ex); return; } return; }
它适用于以下查询字符串。
title contains 'jstock-fe78440e-e0fe-4efb' and trashed = false and 'appdata' in parents and 'me' in owners
最近,我尝试迁移代码以使用“Drive API for Android”。 我有两个GoogleApiClient
范围
- Drive.SCOPE_FILE
- Drive.SCOPE_APPFOLDER
在Drive API for Android中搜索代码
private static void searchFromGoogleDrive(GoogleApiClient googleApiClient) { DriveFolder driveFolder = Drive.DriveApi.getAppFolder(googleApiClient); Query query = new Query.Builder() .addFilter(Filters.and( Filters.contains(SearchableField.TITLE, "jstock-fe78440e-e0fe-4efb"), Filters.eq(SearchableField.TRASHED, false), Filters.ownedByMe() )) .build(); DriveApi.MetadataBufferResult metadataBufferResult = driveFolder.queryChildren(googleApiClient, query).await(); if (metadataBufferResult == null) { Log.i("CHEOK", "metadataBufferResult is null"); } else { Log.i("CHEOK", "metadataBufferResult's status = " + metadataBufferResult.getStatus().isSuccess()); } if (metadataBufferResult != null && metadataBufferResult.getStatus().isSuccess()) { MetadataBuffer metadataBuffer = null; try { metadataBuffer = metadataBufferResult.getMetadataBuffer(); if (metadataBuffer != null ) { for (Metadata md : metadataBuffer) { if (md == null || !md.isDataValid()) { continue; } Log.i("CHEOK", "title = " + md.getTitle()); } // for } // if } finally { if (metadataBuffer != null) { metadataBuffer.release(); } } } return; }
我意识到, Filters.ownedByMe
是导致问题的原因。
以下是基于不同查询的不同结果。
失败
Query query = new Query.Builder() .addFilter(Filters.and( Filters.contains(SearchableField.TITLE, "jstock-fe78440e-e0fe-4efb"), Filters.eq(SearchableField.TRASHED, false), Filters.ownedByMe() )) .build(); // metadataBufferResult's status = false
失败
Query query = new Query.Builder() .addFilter(Filters.and( Filters.ownedByMe() )) .build(); // metadataBufferResult's status = false
成功
Query query = new Query.Builder() .addFilter(Filters.and( Filters.contains(SearchableField.TITLE, "jstock-fe78440e-e0fe-4efb"), Filters.eq(SearchableField.TRASHED, false) )) .build(); // metadataBufferResult's status = true // title = jstock-fe78440e-e0fe-4efb-881d-264a01be483c-checksum=2298926779-date=1452429908167-version=1107.zip
似乎Filters.ownedByMe()
在Drive API for Android中无法正常工作
有什么我可以纠正的吗?