android - 适用于 Android 的 Google Drive Web 服务 API - 显示文件夹中的文件名

标签 android google-drive-api

我正在为我正在制作的 Android 应用程序使用 Google Drive Web Services API。现在,我正在尝试获取根文件夹中的文件名列表。但是,我认为我目前执行此操作的方法效率低下:

public void searchRoot()
{
    Thread t = new Thread(new Runnable()
    {
        @Override public void run()
        {
            try
            {
                Children.List request = service.children().list("root");
                do
                {
                    try
                    {
                        ChildList children = request.execute();

                        for(ChildReference child : children.getItems())
                        {
                            File file = service.files().get(child.getId()).execute();
                        }
                        request.setPageToken(children.getNextPageToken());
                    }
                    catch(IOException e)
                    {
                        request.setPageToken(null);
                    }
                }
                while(request.getPageToken() != null && request.getPageToken().length() > 0);
            }
            catch(IOException e)
            {

            }
        }
    });
    t.start();
}

我认为这种方法效率低下,因为我首先调用 request.execute() 来获取根文件夹中所有子项的列表,但随后我必须调用 service.files().get(child.getId() ).execute() 在每个 child 上,以便为每个 child 获得一个人类可读的文件名。如果根文件夹中有大量文件,获取所有文件名可能会花费任意长的时间。我的问题是——有没有更好的方法来获取文件名列表?就像一个仅通过一个 API 调用就可以返回根文件夹中所有文件名的查询?

顺便说一句,我知道 Google Drive SDK 具有我所请求的功能。但是,我选择使用 Google Drive Web Services API,因为我最终会尝试从我的 Google Drive 帐户流式传输非公共(public)媒体,而且我认为 Drive SDK 不支持它。

最佳答案

我想通了。而不是使用 service.children().list("root"),使用 service.files().list().setQ("'root' in parents")

public void searchRoot()
{
    Thread t = new Thread(new Runnable()
    {
        @Override public void run()
        {
            try
            {
                com.google.api.services.drive.Drive.Files.List request = service.files().list().setQ("'root' in parents");
                do
                {
                    try
                    {
                        FileList children = request.execute();

                        for(File child : children.getItems())
                        {
                            Log.d("Debug", child.getTitle());
                        }
                        request.setPageToken(children.getNextPageToken());
                    }
                    catch(IOException e)
                    {
                        request.setPageToken(null);
                    }
                }
                while(request.getPageToken() != null && request.getPageToken().length() > 0);
            }
            catch(UserRecoverableAuthIOException e)
            {
                startActivityForResult(e.getIntent(), REQUEST_SEARCH_ROOT);
            }
            catch(IOException e)
            {

            }
        }
    });
    t.start();
}

关于android - 适用于 Android 的 Google Drive Web 服务 API - 显示文件夹中的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717376/

相关文章:

java - OnActivityResult 与 OnClicklistener 的放置

java - Android - ListView 的问题

flutter - 如何使用 API flutter 覆盖 Google Drive 中的文件

coldfusion - 带有 ColdFusion 的 Google Drive API

java - Google Drive Java API V2 与 V3

java - 代理背后的 Google Drive API Java 客户端

java - 去掉 hashmap 中的逗号

android - 如何删除 AppBarLayout 底部的分隔线

java - 亚行——它是如何运作的?

java - 如何以编程方式编辑 native 谷歌文档?