我正在为我正在制作的 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/