6

Google ドライブを含む iOS アプリを開発しています。ファイルをリストしようとしているときにGoogleドライブで、すべてのフォルダー、サブフォルダー、サブファイルを単一のページ自体に表示します。これらは私のコードです

GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];

    [driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                         GTLDriveFileList *filesList,
                                                         NSError *error) {
if (error == nil) {

            [FilesFromGoogleDrive addObjectsFromArray:filesList.items
             ];

        };

メインページにすべてのファイルをリストしたくありません。フォルダー、サブフォルダー、サブファイルに順次アクセスするには、Googleドライブアプリケーションと同様のものが必要です.過去1週間からこれを試していますが、良い結果はありません. フォルダ、サブフォルダにアクセスする方法を教えてください。

4

4 に答える 4

5

で識別されるフォルダー内のすべてのファイルを一覧表示する場合folderIdは、次のコードを使用できます ( https://developers.google.com/drive/v2/reference/children/listから)。

+ (void)printFilesInFolderWithService:(GTLServiceDrive *)service
                             folderId:(NSString *)folderId {
  // The service can be set to automatically fetch all pages of the result. More
  // information can be found on https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Result_Pages.
  service.shouldFetchNextPages = YES;

  GTLQueryDrive *query =
    [GTLQueryDrive queryForChildrenListWithFolderId:folderId];
  // queryTicket can be used to track the status of the request.
  GTLServiceTicket *queryTicket =
    [service executeQuery:query
        completionHandler:^(GTLServiceTicket *ticket,
                            GTLDriveChildList *children, NSError *error) {
          if (error == nil) {
            for (GTLDriveChildReference *child in children) {
              NSLog(@"File Id: %@", child.identifier);
            }
          } else {
            NSLog(@"An error occurred: %@", error);
          }
        }];
}

folderId別のオプションは、Parents コレクションにあるファイルを検索することです。

https://developers.google.com/drive/search-parameters

たとえば、次のような検索クエリを使用できます。

'1234567' in parents

「1234567」は、ファイルを一覧表示するフォルダーの ID です。

于 2013-01-28T22:34:50.593 に答える
0

これがあなたが望むものであることを願っています。このコードを使用するだけで、必要なものが得られます。

-(void)getFileListFromSpecifiedParentFolder {
        GTLQueryDrive *query2 = [GTLQueryDrive queryForChildrenListWithFolderId:<some_folder_id or root>];
        query2.maxResults = 1000;

        // queryTicket can be used to track the status of the request.
        [self.driveService executeQuery:query2
            completionHandler:^(GTLServiceTicket *ticket,
                            GTLDriveChildList *children, NSError *error) {
                NSLog(@"\nGoogle Drive: file count in the folder: %d", children.items.count);
                //incase there is no files under this folder then we can avoid the fetching process
                if (!children.items.count) {
                    return ;
                }

                if (error == nil) {
                    for (GTLDriveChildReference *child in children) {

                        GTLQuery *query = [GTLQueryDrive queryForFilesGetWithFileId:child.identifier];

                        // queryTicket can be used to track the status of the request.
                        [self.driveService executeQuery:query
                            completionHandler:^(GTLServiceTicket *ticket,
                                                GTLDriveFile *file,
                                                NSError *error) {

                                                NSLog(@"\nfile name = %@", file.originalFilename);
                                                }];
                    }
                }
            }];
    }
于 2013-01-30T12:10:10.310 に答える
0

これが私がやった方法です:

NSString* currentFolderID = @"root";//folder id for the Google Drive root directory
GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
NSString* queryQ = [NSString stringWithFormat: @"trashed = false and '%@' in parents", currentFolderID];
query.q  = queryQ;
[_googleService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                                                GTLDriveFileList *files,
                                                                                NSError *error)
                   {
                       if (error == nil)
                       {
                            [self listFiles: files.items];
 }

@"root" を親として使用してルート ディレクトリからファイルを一覧表示し、サブフォルダー アイテムの file.identifier を親としてファイルを一覧表示するために使用します。サブフォルダーからファイルをクエリするには、次の 2 行を使用して、サブフォルダー内のすべてのファイルの親識別子を取得します。

GTLDriveFile subFolderItem;
currentFolderID = subFolderItem.identifier;
于 2013-04-30T19:06:54.167 に答える
0

Google ドライブのすべてのファイルのリストを取得するには、以下のコードを使用します。

GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
query.q = [NSString stringWithFormat:@"'%@' IN parents", @"root"];

[self.serviceDrive executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                          GTLDriveFileList *files,
                                                          NSError *error) {

    if (error == nil)
    {
        NSMutableArray * driveFiles = [[NSMutableArray alloc] init];
        [driveFiles addObjectsFromArray:files.items];

        for (GTLDriveFile *file in driveFiles)
            NSLog(@"File is %@", file.title);

    }
    else
    {
        NSLog(@"An error occurred: %@", error);
    }
}];
于 2015-12-10T16:13:20.733 に答える