google getdriveresourceclient for example developers java android google-drive-sdk google-drive-android-api

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?