首先,直到昨天(2014 年 3 月 12 日)之前,一切看起来都还不错。从午餐时间开始,由 GDAA 创建的文件(不是文件夹)不再显示在 Web Drive 界面中。一些人出现了相当大的延迟(3 小时以上),此后就没有了。Android GDAA 查找/搜索工具同时显示文件(包括内容)和文件夹,但 Web Drive 只有文件夹。我使用此代码对其进行测试,但我也尝试了官方演示,结果相同。
1 回答
通过使用标准 Android 设备清空 Google Play 服务缓存来修复
Settings -> Apps -> Google Play Services -> Clear Cache
可能是由于开发环境滥用服务造成的障碍。如果再次出现,将进一步调查。
... 继续
随着我深入挖掘,我发现了一个看似无关紧要的怪癖,但却会给应用程序开发人员带来很大的问题。
1/ 假设用户可以访问设备的
Settings -> Apps -> Google Play Services -> Manage Space -> Clear All Data
任何时候她/他决定。使用 GDAA 的应用程序不知道此操作,设备所有者也不知道 Google Play 服务与基于 Google Drive 的应用程序有任何关系。
2/ 发生这种情况时,GDAA 应用程序将失去按 TITLE 查找文件夹/文件的能力。此处查询失败(请参阅“NO md AVAILABLE”)
...
if (rslt.getStatus().isSuccess()) {
MetadataBuffer mdb = null;
try {
mdb = rslt.getMetadataBuffer();
if (mdb == null) return null;
dMDs = new ArrayList<DrvMD>();
for (Metadata md : mdb) {
if ((md == null) || (!md.isDataValid()) || (md.isTrashed())) continue;
// NO md AVAILABLE !!!
}
} finally { if (mdb != null) mdb.close(); }
}
尽管它看起来像一个小怪癖,但用户可以自由地做到这一点的事实给应用程序带来了重大问题。
原因如下:如果存在同名文件夹/文件,则在 Google Drive 中创建文件夹/文件不会失败。它将创建一个具有相同名称的新名称(我了解模型)。但是,如果没有可靠的方法来通过名称查询存在(由上述用户的操作引起),则应用程序将在此逻辑中失败:
if (FOLDER/FILE by name exists)
return FOLDER/FILE ID
else
ID = create a new FOLDER/FILE
到目前为止,这是我在创建/访问文件夹/文件时能想到的唯一逻辑。我知道还有 2 个可用的唯一 ID(资源 ID 和 DriveId),但在这种情况下它们没有用。任何想法如何解决这个问题?如果 Google Play 服务从用户的操作中恢复而不失去查询现有对象的能力,那就太好了。