如果您要根据文件夹的存在状态创建文件夹,这里的“createTree()”方法就是这样做的。
以下 2 个代码片段根据传递的参数列出文件/文件夹(在文件夹内,全局,基于 MIME 类型......)。md.getTitle()行是您可以用来查询文件/文件夹的行。
GoogleApiClient _gac;
void findAll(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();
if (rslt.getStatus().isSuccess()) {
MetadataBuffer mdb = null;
try {
mdb = rslt.getMetadataBuffer();
if (mdb == null) return null;
for (Metadata md : mdb) {
if ((md == null) || md.isTrashed()) continue;
--->>>> md.getTitle()
}
} finally { if (mdb != null) mdb.close(); }
}
}
void listAll(DriveFolder fldr) {
MetadataBufferResult rslt = fldr.listChildren(_gac).await();
if (rslt.getStatus().isSuccess()) {
MetadataBuffer mdb = null;
try {
mdb = rslt.getMetadataBuffer();
if (mdb == null) return null;
for (Metadata md : mdb) {
if ((md == null) || md.isTrashed()) continue;
--->>>> md.getTitle()
}
} finally { if (mdb != null) mdb.close(); }
}
}
关键可能是检查“isTrashed()”状态。由于网络上的“删除”文件只会将其移动到垃圾箱。此外,一般删除(在网站上,因为 API 中没有“删除”)有点不稳定。我测试了一段时间,可能需要几个小时才能更新“isTrashed()”状态。而且手动清空 Google Drive 中的垃圾箱也是不可靠的。在 Github 上查看这个问题。
这里有更多讨论,但可能与您的问题无关。