getdriveresourceclient - Filters.ownedByMe no funciona en ''Drive API for Android''(pero funciona correctamente en ''API Client Library for Java'')
google drive java example (0)
Anteriormente, estoy usando "API Client Library for Java" para realizar búsquedas de archivos en la carpeta appdata.
Código de búsqueda de archivos en API Client Library para 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) {
continue;
}
...
}
request.setPageToken(fileList.getNextPageToken());
} while (request.getPageToken() != null && request.getPageToken().length() > 0);
} catch (IOException ex) {
log.error(null, ex);
return;
}
return;
}
Funciona perfectamente bien para la siguiente cadena de consulta.
title contains ''jstock-fe78440e-e0fe-4efb'' and trashed = false and ''appdata'' in parents and ''me'' in owners
Recientemente, trato de migrar el código para usar "Drive API for Android". Tengo 2 ámbitos para GoogleApiClient
- Drive.SCOPE_FILE
- Drive.SCOPE_APPFOLDER
Código de búsqueda de archivos en Drive API para 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;
}
Me doy cuenta, Filters.ownedByMe
es el que causa el problema.
Aquí están los diferentes resultados basados en diferentes consultas.
Ha fallado
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
Ha fallado
Query query = new Query.Builder()
.addFilter(Filters.and(
Filters.ownedByMe()
))
.build();
// metadataBufferResult''s status = false
Éxito
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
Parece que Filters.ownedByMe()
no funciona correctamente en Drive API para Android
¿Hay algo que pueda rectificar esto?