Filters.ownedByMe не работает в «Drive API для Android» (но работает правильно в «API Client Library для Java»)
Ранее я использовал «Клиентскую библиотеку API для Java» для поиска файлов в папке appdata.
Код поиска файлов в клиентской библиотеке API для Javaprivate 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) {
continue;
}
...
}
request.setPageToken(fileList.getNextPageToken());
} while (request.getPageToken() != null && request.getPageToken().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 для Android». У меня есть 2 области дляGoogleApiClient
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 для Android
Есть ли что-нибудь, что я могу исправить это?