2012-09-18 2 views
1

J'utilise Google Drive SDK v2 sur Android pour obtenir la liste des dossiers racine. Actuellement, je vois ces étapes nécessaires - qui semblent charger pour toujours. Est-ce qu'il n'y a pas de moyen plus rapide?Le chemin le plus rapide/le plus court vers les dossiers racine?

J'ai essayé d'utiliser la recherche avec le paramètre q = mais je n'arrive pas à le faire fonctionner (FileList vs Files.List) - différents niveaux d'API?

FileList files = drive.files().list().setQ("'root' in parents and mimeType='application/vnd.google-apps.folder' and trashed=false"); 

Voici ce que je fais actuellement:

About about = drive.about().get().execute(); 
if (about != null) { 
    ChildList childList = drive.children().list(about.getRootFolderId()).execute(); 
    if (childList != null) { 
     List<ChildReference> listChildReference = childList.getItems(); 
     for (ChildReference childReference : listChildReference) { 
      File file = drive.files().get(childReference.getId()).execute(); 
      if (file != null) { 
       String fileExtension = file.getFileExtension(); 
       String mimeType = file.getMimeType(); 
       if (mimeType != null 
         && mimeType.equals("application/vnd.google-apps.folder") 
         && (fileExtension == null || fileExtension.equals(""))) { 
        Log.d(this.getClass().getName(), file.getTitle()); 
       } 
      } 
     } 
    } 
} 

Quelle est la plus rapide pour une application Android?

Merci d'avance.

Répondre

1

Mon personnel opinion est d'éviter le lecteur SDK et appelez l'API REST directement. C'est une API assez simple, et de la façon dont la documentation est structurée, vous êtes obligé de la comprendre quand même pour utiliser le SDK. Vous avez l'avantage que si quelque chose ne fonctionne pas, vous pouvez directement comparer votre application avec ce qui se passe sur le fil et résoudre les problèmes.

+0

Désolé, cela est mauvais conseils. Utilisez l'API Drive qui fait partie du Drive SDK (ou c'est peut-être ce que vous voulez dire?). –

+1

Mon commentaire était que je préfère utiliser l'API HTTP de niveau inférieur, former ma propre URL et analyser les résultats moi-même. Bien que ce soit plus de lignes de code, (a) c'est mon code, donc si c'est cassé je peux facilement le réparer, (b) il y a une relation directe entre ce que fait mon code et ce qui se passe sur le fil est un problème, il est facile à diagnostiquer et à corriger, (c) c'est une couche de dépendance de moins dans ma pile. Le client Java API est marqué comme bêta et est mis à jour tous les deux mois. Ce n'est pas une bonne recette pour le code de production. Juste mon avis. – pinoyyid

0

Je l'ai trouvé:

@Override 
protected ArrayList<File> doInBackground(final Void... voids) { 
    ArrayList<File> result = new ArrayList<File>(); 

    Files.List request = null; 

    boolean ok = true; 

    do { 
     try { 
      request = drive 
        .files() 
        .list() 
        .setMaxResults(200) 
        .setQ("'root' in parents and mimeType='application/vnd.google-apps.folder' and trashed=false"); 
      FileList files = request.execute(); 

      result.addAll(files.getItems()); 
      request.setPageToken(files.getNextPageToken()); 
     } catch (IOException exception) { 
      ok = false; 
     } 
    } while (ok && request.getPageToken() != null && request.getPageToken().length() > 0); 

    return result; 
} 
Questions connexes