API de Android Drive Error de carpeta principal no válida

Utilicé Android Drive Api para cargar mis archivos en Drive. Creé una carpeta ("NewFolder") en la raíz de Google Drive y creé una carpeta interna ("InnerFolder") dentro de mi "NewFolder" desde la aplicación de Android usando el siguiente código. Luego escribo mis archivos en este "InnerFolder" desde mi aplicación de Android.

Mi aplicación crea el "InnerFolder" en la instalación por primera vez solo en mi dispositivo. Luego, desinstalar y volver a instalar la aplicación no creará la carpeta nuevamente (Carpeta creada almacenada ID de unidad (como DriveId: yrjundeen12cnfe) en el archivo local).

Mi código funciona bien en la instalación por primera vez. Pero si desinstalo y reinstalo la aplicación muchas veces e intento cargar en Google Drive, recibo un error como "Carpeta principal no válida" en el método de devolución de llamada de createFile.

Código de creación de carpeta por primera vez:

private void createGalleryFolder() {
        DriveFolder folder = Drive.DriveApi.getRootFolder(googleApiClient);
        MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                .setTitle(AppConstants.DEFAULT_GALLERY_NAME).build();
        folder.createFolder(googleApiClient, changeSet).setResultCallback(
                createRootFolderCallback);
}

        final ResultCallback<DriveFolderResult> createRootFolderCallback = new ResultCallback<DriveFolderResult>() {

    @Override
    public void onResult(DriveFolderResult result) {
        if (!result.getStatus().isSuccess()) {
            showError();
            return;
        }

        // Root folder created Successfully
        DriveId mFolderDriveId = result.getDriveFolder().getDriveId();

        AppUtilities.saveOnLocalFile(mFolderDriveId, AppConstants.ROOT_FOLDER_ID_FILE);

        if (!deviceID.equalsIgnoreCase("")) {
            DriveFolder folder = Drive.DriveApi.getFolder(googleApiClient,
                    result.getDriveFolder().getDriveId());
            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle(deviceID).build();
            folder.createFolder(googleApiClient, changeSet)
                    .setResultCallback(createInnerFolderCallback);
        } else {

            showError();        }

    }
};

final ResultCallback<DriveFolderResult> createInnerFolderCallback = new ResultCallback<DriveFolderResult>() {

    @Override
    public void onResult(DriveFolderResult result) {
        if (!result.getStatus().isSuccess()) {

            showError();
            return;
        }

        // IMEI folder created successfully inside the Root folder
        DriveId mFolderDriveId = result.getDriveFolder().getDriveId();

        AppUtilities.saveOnLocalFile(mFolderDriveId, AppConstants.INNER_FOLDER_ID_FILE);

        // Success
    }
};

Código de carga de archivo:

private void saveFileToDrive(final Bitmap bitmapToSave,final File imageFile,final String imageName) {

        Drive.DriveApi.newDriveContents(googleApiClient).setResultCallback(driveContentsCallback);
}

final private ResultCallback<DriveContentsResult> driveContentsCallback =
            new ResultCallback<DriveContentsResult>() {
        @Override
        public void onResult(DriveContentsResult result) {

            if(!result.getStatus().isSuccess()){
                Log.i("Test1", "Failed to create new contents");
                return;
            }

            Log.i("Test1", "New contents created");

            //Write image data to OutputStream
            OutputStream outputStream = result.getDriveContents().getOutputStream();
            ByteArrayOutputStream bitmapStream = new ByteArrayOutputStream();
            bitmapToSave.compress(Bitmap.CompressFormat.JPEG, 100, bitmapStream);
            try {
                outputStream.write(bitmapStream.toByteArray());

                DriveFolder folder = Drive.DriveApi.getFolder(googleApiClient, DriveId.decodeFromString(getFolderDriveID()));


                MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                        .setTitle(imageName)
                        .setMimeType("image/jpeg")
                        .setStarred(false).build();

                folder.createFile(googleApiClient, changeSet, result.getDriveContents()).setResultCallback(fileCallback);
            } catch (IOException e) {
                Log.i("Test1","Unable to write file contents");
            }
        }
    };

    final private ResultCallback<DriveFileResult> fileCallback =
            new ResultCallback<DriveFileResult>() {
        @Override
        public void onResult(DriveFileResult result) {
            if (!result.getStatus().isSuccess()) {
                Log.i("Test1","Error while trying to create the file "+result.getStatus().getStatusMessage());
                return;
            }
            Log.i("Test1","Created a file: " + result.getDriveFile().getDriveId());

            result.getDriveFile().getMetadata(googleApiClient).setResultCallback(fileUploadedResultCallback);
        }
    };


    final private ResultCallback<MetadataResult> fileUploadedResultCallback =
            new ResultCallback<MetadataResult>() {
        @Override
        public void onResult(MetadataResult result) {

            if(!result.getStatus().isSuccess()){
                Log.i("Test1", "Failed to upload");
                return;
            }

            Log.i("Test1", "File uploaded");
        }
    };

Error en ResultCallback:

D/dalvikvm(  584): threadid=50: interp stack at 0x549a5000
D/dalvikvm(  584): threadid=50: calling run()
I/Test1   (  813): Image added
--------- beginning of /dev/log/system
D/ActivityThread(  584): SVC-CREATE_SERVICE handled : 0 / CreateServiceData{token=android.os.BinderProxy@415dbf40 className=com.google.android.gms.drive.api.DriveAsyncService packageName=com.google.android.gms intent=null}
D/ActivityThread(  584): SVC-Calling onStartCommand: com.google.android.gms.drive.api.DriveAsyncService@415b6480, flags=2, startId=1
D/ActivityThread(  584): SVC-SERVICE_ARGS handled : 0 / ServiceArgsData{token=android.os.BinderProxy@415dbf40 startId=1 args=Intent { act=com.google.android.gms.drive.EXECUTE pkg=com.google.android.gms }}
W/DataServiceConnectionImpl(  584): Could not find entry, and no valid resource id: DriveId:CAESABgGIMq7nNDgUg==
E/DriveAsyncService(  584): Invalid parent folder.
E/DriveAsyncService(  584): OperationException[Status{statusCode=Invalid parent folder., resolution=null}]
E/DriveAsyncService(  584):     at com.google.android.gms.drive.api.e.e(SourceFile:619)
E/DriveAsyncService(  584):     at com.google.android.gms.drive.api.e.a(SourceFile:458)
E/DriveAsyncService(  584):     at com.google.android.gms.drive.api.a.n.a(SourceFile:82)
E/DriveAsyncService(  584):     at com.google.android.gms.drive.api.a.b.a(SourceFile:27)
E/DriveAsyncService(  584):     at com.google.android.gms.common.service.c.onHandleIntent(SourceFile:60)
E/DriveAsyncService(  584):     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
E/DriveAsyncService(  584):     at android.os.Handler.dispatchMessage(Handler.java:99)
E/DriveAsyncService(  584):     at android.os.Looper.loop(Looper.java:154)
E/DriveAsyncService(  584):     at android.os.HandlerThread.run(HandlerThread.java:65)
I/Test1   (  813): Error while trying to create the file Invalid parent folder.

Respuestas a la pregunta(2)

Su respuesta a la pregunta