title: Android Drive API Invalid parent folder error
body: <p>I used Android Drive Api to upload my files on Drive.I created a folder("NewFolder") on Google Drive root and created a inner folder("InnerFolder") inside my "NewFolder" from android app using following code.Then I write my files on this "InnerFolder" from my android app.</p>
  
  <p>My app create the "InnerFolder" on first time installation on my device only.Then uninstall and reinstall App will not created folder again(Stored created folder Drive Id(like DriveId:yrjundeen12cnfe) in local file). </p>
  
  <p>My Code works fine on first time Installation.But If I uninstall and reinstall app many times and I try to upload on Google Drive,I got error as "Invalid parent folder" on callback method of createFile.</p>
  
  <p><strong>First Time Folder Creation code:</strong></p>
  
  <pre><code>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&lt;DriveFolderResult&gt; createRootFolderCallback = new ResultCallback&lt;DriveFolderResult&gt;() {
  
      @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&lt;DriveFolderResult&gt; createInnerFolderCallback = new ResultCallback&lt;DriveFolderResult&gt;() {
  
      @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
      }
  };
  </code></pre>
  
  <p><strong>File Upload code:</strong></p>
  
  <pre><code>private void saveFileToDrive(final Bitmap bitmapToSave,final File imageFile,final String imageName) {
  
          Drive.DriveApi.newDriveContents(googleApiClient).setResultCallback(driveContentsCallback);
  }
  
  final private ResultCallback&lt;DriveContentsResult&gt; driveContentsCallback =
              new ResultCallback&lt;DriveContentsResult&gt;() {
          @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&lt;DriveFileResult&gt; fileCallback =
              new ResultCallback&lt;DriveFileResult&gt;() {
          @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&lt;MetadataResult&gt; fileUploadedResultCallback =
              new ResultCallback&lt;MetadataResult&gt;() {
          @Override
          public void onResult(MetadataResult result) {
  
              if(!result.getStatus().isSuccess()){
                  Log.i("Test1", "Failed to upload");
                  return;
              }
  
              Log.i("Test1", "File uploaded");
          }
      };
  </code></pre>
  
  <p><strong>Error on ResultCallback:</strong></p>
  
  <pre><code>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.
  </code></pre>