android - puedo - Detecta conflictos al cargar documentos en Google Drive
google drive sin conexion android (2)
Mi aplicación de Android actualiza un documento de Google Drive. El archivo se puede modificar también en otros lugares (por ejemplo, a través de la interfaz web de Drive), por lo que puede haber un conflicto en la carga de archivos. Sin embargo, esto rara vez ocurre. Es por eso que no quiero que mi aplicación consulte primero el historial de revisión (ya que esto en la mayoría de los casos es innecesario) y solo después de eso, actualice el archivo. ¿Cómo puedo detectar que hay un conflicto al actualizar el archivo?
Mi investigación hasta el momento revela que getHeadRevisionId () devuelve null aunque se ha informado que el ID de revisión del encabezado nulo está corregido . Otra cosa que probé fue setEtag () en el archivo antes de la actualización (). Debería haberme dado un error en la actualización , pero la carga fue exitosa, ¡incluso el archivo había sido cambiado de forma remota! ¿Es esta la forma correcta de usar ETag?
"¿Es esta la forma correcta de usar ETag?"
Sí
Además, para archivos que no sean de Documentos, también debe verificar md5Checksum para ver los cambios en el contenido.
Establezca el encabezado HTTP If-Match
:
final Update update = mService.files().update(mDriveFile.getId(), mDriveFile, byteContent);
final HttpHeaders headers = update.getRequestHeaders();
headers.setIfMatch(mDriveFile.getEtag());
update.setRequestHeaders(headers);
mDriveFile = update.execute();
En caso de que el documento haya cambiado mientras tanto, la actualización será rechazada con una respuesta como:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 412 Precondition Failed
{
"code": 412,
"errors": [
{
"domain": "global",
"location": "If-Match",
"locationType": "header",
"message": "Precondition Failed",
"reason": "conditionNotMet"
}
],
"message": "Precondition Failed"
}
Tenga en cuenta que ETag puede cambiar incluso si el contenido no lo hace .