Here is an 'await' version (for simplicity - must be run on non-UI thread) of the solution (initialization / connection of GoogleApiClient is standard and can be found elsewhere):
  static final String MIMEFLDR  = "application/vnd.google-apps.folder";
  private GoogleApiClient  _gac;
  DriveFolder myFldr = getOrCreateFldr(null, "myFolder");
  DriveFolder myChildFldr = getOrCreateFldr(myFldr, "myChildFolder");
  private DriveId findFirst(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();
    MetadataBuffer mdb = null;
    if (rslt.getStatus().isSuccess()) try {
      mdb = rslt.getMetadataBuffer();
      for (Metadata md : mdb) {
        if ((md == null) || (!md.isDataValid()) || md.isTrashed()) continue;
        return md.getDriveId();
      }
    } catch (Exception e) {}
    finally { if (mdb != null) mdb.close(); } 
    return null;
  }
  private DriveFolder getOrCreateFldr(DriveFolder fldr, String titl) {
    DriveFolder df = null;
    try {
      DriveId dId = findFirst(titl, MIMEFLDR, fldr);
      if (dId != null) {                 // exists
        df = Drive.DriveApi.getFolder(_gac, dId);
      } else {                           // doesn't exist, create in folder / root
        df = createFldr((fldr == null) ? Drive.DriveApi.getRootFolder(_gac) : fldr,  titl);
      }
    } catch (Exception e) {UT.le(e);}
    return df;
  }
  private DriveFolder createFldr(DriveFolder fldr, String name) {
    DriveFolder drvFldr = null;
    try { 
      MetadataChangeSet meta = 
              new MetadataChangeSet.Builder().setTitle(name).setMimeType(MIMEFLDR).build();
      drvFldr = fldr.createFolder(_gac, meta).await().getDriveFolder();
    } catch (Exception e) {}
    return drvFldr;
  }
It can easily be turned into a callback version but it would look messy. Be carefull with the findFirst() method though, Google Drive allows multiple files / folders with the same name (since only the ResourceId / DriveId are unique identifiers).
Recursive folder creation is shown in this GitHub project in case you want to dig deeper.