tutorial google for example developers android google-drive-sdk google-drive-android-api

android - example - google drive api for developers



API de Android de Google Drive: compruebe si existe la carpeta (3)

Después de mucha investigación, este es el código con el que terminé. Funciona correctamente, pero tiene un problema: cuando una carpeta se desecha en Google Drive, toma un tiempo (horas) antes de que se actualicen los metadatos de mi aplicación, lo que significa que este código puede detectar primero si la carpeta ha sido eliminada. Un par de horas más tarde, el evento de la basura realmente sucedió: más información y discusiones se pueden encontrar here .

public class checkFolderActivity extends BaseDemoActivity { @Override public void onConnected(Bundle connectionHint) { super.onConnected(connectionHint); DriveId folderId = DriveId.decodeFromString(folderId); DriveFolder folder = Drive.DriveApi.getFolder(mGoogleApiClient, folderId); folder.getMetadata(mGoogleApiClient).setResultCallback(metadataRetrievedCallback); } final private ResultCallback<DriveResource.MetadataResult> metadataRetrievedCallback = new ResultCallback<DriveResource.MetadataResult>() { @Override public void onResult(DriveResource.MetadataResult result) { if (!result.getStatus().isSuccess()) { Log.v(TAG, "Problem while trying to fetch metadata."); return; } Metadata metadata = result.getMetadata(); if(metadata.isTrashed()){ Log.v(TAG, "Folder is trashed"); }else{ Log.v(TAG, "Folder is not trashed"); } } }; }

Estoy intentando averiguar cómo comprobar si existe una carpeta en Google Drive con la nueva API de Android de Google Drive

He intentado lo siguiente, pensando que se bloquearía o devolvería el valor nulo si no se encuentra la carpeta, pero no lo hace (siempre y cuando sea un DriveId válido, aunque la carpeta haya sido eliminada).

DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), driveId));

Si intento crear un archivo de la carpeta que obtengo del código anterior, ¿no se bloquea tampoco? Es evidente que me está costando entender cómo funciona esta nueva API, especialmente con los tutoriales muy limitados y las preguntas de SO, y estoy realmente estancado en esta, por lo que cualquier comentario será muy apreciado.

Solo para aclarar mi problema: estoy creando un archivo en una carpeta específica de Google Drive, pero si la carpeta no existe (ha sido eliminada por el usuario), primero quiero crearla.


Puedes intentar obtener los metadatos de la carpeta. Si la carpeta no existe, esto fallará.


Si está creando una carpeta en función de su estado de existencia, el método ''createTree ()'' hace precisamente eso.

Los siguientes 2 fragmentos de código enumeran los archivos / carpetas en función de los argumentos pasados ​​(dentro de una carpeta, globalmente, según el tipo MIME ...). La línea con md.getTitle () es la que puede usar para interrogar archivos / carpetas.

GoogleApiClient _gac; void findAll(String title, String mime, DriveFolder fldr) { ArrayList<Filter> fltrs = new ArrayList<Filter>(); fltrs.add(Filters.eq(SearchableField.TRASHED, false)); if (title != null) fltrs.add(Filters.eq(SearchableField.TITLE, title)); if (mime != null) fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime)); Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); MetadataBufferResult rslt = (fldr == null) ? Drive.DriveApi.query(_gac, qry).await() : fldr.queryChildren(_gac, qry).await(); if (rslt.getStatus().isSuccess()) { MetadataBuffer mdb = null; try { mdb = rslt.getMetadataBuffer(); if (mdb == null) return null; for (Metadata md : mdb) { if ((md == null) || md.isTrashed()) continue; --->>>> md.getTitle() } } finally { if (mdb != null) mdb.close(); } } } void listAll(DriveFolder fldr) { MetadataBufferResult rslt = fldr.listChildren(_gac).await(); if (rslt.getStatus().isSuccess()) { MetadataBuffer mdb = null; try { mdb = rslt.getMetadataBuffer(); if (mdb == null) return null; for (Metadata md : mdb) { if ((md == null) || md.isTrashed()) continue; --->>>> md.getTitle() } } finally { if (mdb != null) mdb.close(); } } }

La clave probablemente esté verificando el estado "isTrashed ()". Dado que el archivo ''eliminar'' en la web solo lo mueve a TRASH. Además, la eliminación en general (en el sitio web, ya que no hay "BORRAR" en la API ) es un poco inusual. Lo estuve probando por un tiempo, y puede tomar horas antes de que se actualice el estado "isTrashed ()". Y vaciar manualmente la papelera en Google Drive tampoco es confiable. Vea este here .

Aquí se habla un poco más , pero probablemente no esté relacionado con su problema.