java - studio - API de Android de Google Drive-DriveId no válido y Null ResourceId
google drive para desarrolladores (1)
He estado luchando contra este código todo el día sin suerte. Empecé siguiendo esta muestra de código de Google.
El problema es que la carpeta se crea correctamente pero dentro deResult () , siempre obtengo DriveId o resourceId que no es válido o está incompleto. Eso significa que no puedo crear un archivo dentro de la carpeta que creé. Aquí está el código que estoy usando:
public class CreateFolderActivity extends BaseDemoActivity {
@Override
public void onConnected(Bundle connectionHint) {
super.onConnected(connectionHint);
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("MyAppFolder").build();
Drive.DriveApi.getRootFolder(getGoogleApiClient()).createFolder(
getGoogleApiClient(), changeSet).setResultCallback(callback);
}
final ResultCallback<DriveFolderResult> callback = new ResultCallback<DriveFolderResult>() {
@Override
public void onResult(DriveFolderResult result) {
if (!result.getStatus().isSuccess()) {
showMessage("Error while trying to create the folder");
return;
}
// this value is always invalid with ending == operators
Log.d("DRIVEID", "Created a folder: " + result.getDriveFolder().getDriveId());
}
};
}
Cada vez que ejecuto este código, obtengo la siguiente identificación que parece incompleta:
CAESABi2VyCCzdWOuVMoAQ==
¡No sé lo que está sucediendo aquí!
He leído y leído Google sobre cómo agregar oyentes para escuchar los eventos de finalización, pero ninguno de ellos parece funcionar.
He visto preguntas similares en SO sobre esto, pero ninguno de ellos me funciona.
Copié manualmente el FolderId a través de mi navegador después de que la aplicación lo creó y luego pegué en mi código de Android y la aplicación creó un archivo con éxito. Pero esto no es cómo deberían funcionar las cosas.
¿Debo esperar a que se complete la sincronización? Si es así, ¿cómo?
¡Gracias de antemano!
La respuesta a su problema probablemente se puede encontrar aquí . DriveId que está recibiendo está bien, pero no debería manejarlo directamente. Es un DriveId '' preliminar '' que cambia una vez que se ha confirmado el objeto (de nuevo, ver SO 22874657 ). Puedes probarlo comparando DriveId que estás obteniendo vs. DriveId y entrarás en ''onCompletion (Evento CompletionEvent)''.
Este es solo uno de los efectos secundarios de la lógica de GDAA, que lo protege del estado de la red en línea / fuera de línea que resulta en retrasos impredecibles. Solo debes confiar en las devoluciones de llamadas.
Pero me sorprende que no pueda usar este DriveId ''preliminar'' (en el caso de una carpeta) inmediatamente como padre de otro objeto (carpeta / archivo). Nunca lo he experimentado, pasando el DriveId ''preliminar'' de inmediato a otro método GDAA.
Es diferente en el caso del ResourceId. Ese es secundario en el GDAA y se usa solo si sales del dispositivo. El GDAA no lo conoce hasta que el objeto se haya comprometido (cargado).
Utilicé una lógica similar (creación de carpeta / árbol de archivos) en esta demostración (consulte el método MainActivity.createTree ()). Eres bienvenido a excavar en eso.
Hay un problema relacionado discutido en SO 34318220 .
Buena suerte