您好我使用Google Drive Api使用AppDataFolder工具存储数据库。我有一个测试应用程序在一台设备上成功运行。我可以上传/更新/删除/下载数据库文件,并将其重新集成到程序中,没有任何问题。
我遇到的问题是,当我想与运行相同应用的其他设备共享此数据库时,事情无法按预期工作。示例设备A我上传数据库,设备B - 我想下载数据库但没有找到文件(这种延迟可能在几秒到几小时之间变化很大)。原因 - 当使用Api时,它决定何时同步'数据,因为它排队而不是即时上传。因此,当在一个设备上使用时,这不是一个问题,因为它需要同步的'来自云存储的文件,或等待同步的文件。
我尝试过各种各样的事情,例如尝试列出所有AppDataFolder文件或通过带有可搜索过滤器的查询检索元数据,然后再发出请求更新/删除等等。但是我无法从根本上让它按照预期工作选择何时同步。
所以我的实际问题是:如何在我需要时强制Google Drive同步我的文件,即每次发出请求时,都可以使用同一个应用程序在多个设备上实现同步。必须有答案,因为我认为这是你使用AppDataFolder的第一个基本原因。
提前致谢
修改/更新:
我已经能够在Api中找到一个选项来同步'使用此代码的驱动器内容:
// try to sync
Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<com.google.android.gms.common.api.Status>() {
@Override
public void onResult(com.google.android.gms.common.api.Status status) {
if (!status.getStatus().isSuccess()) {
Log.e("SYNCING", "ERROR" + status.getStatusMessage());
} else {
Log.e("SYNCING", "SUCCESS");
// execute async task to list AppFolderContents
new AppFolderContentsAsyncTask(getActivity()).execute();
}
}
});
这适用于快速连续3/4次尝试,但是我达到了同步限制和状态消息:
超出了ERRORSync请求速率限制。
有没有办法提高请求率,因为如果我必须有一个提示用户的应用程序,请稍后再试一次 - 不知道你有多长时间等到你可以的时候!&#39;
解决方案 - 对各种问题和我的想法(对于它的价值)
我想要的解决方案(通过电子邮件发送一个发布了同步而没有问题的驱动器应用程序的应用程序开发者)是使用Drive REST Api,而不是较新的(和Google首选的)Drive API。我试着限制了'requestSync&#39;仅当用户导航到具有Drive选项的片段(而不是每个文件事务)时。然而,这可能会解决大多数情况下的requestSync速率限制,但它仍然可以达到该限制。此外,如果多个设备正在运行应用程序,并且链接到同一个驱动器帐户同时在应用程序中同步/上传/删除文件,则可能会失去同步 - 可能是一种罕见的情况,但仍然可能。在用户体验或应用程序设计方面,我不认为让用户等待同步文件是一个可行的选择。
很奇怪 - 实际的Drive应用程序允许您根据需要多次刷新(requestSync?)。我在网络界面上快速连续创建了20个文件夹,在创建每个文件夹后,我刷新了手机上的云端硬盘应用程序并同步了20次。谷歌似乎理解同步的重要性,但选择在新的Drive API中确保这一点非常困难。如前所述,将文件上传到云存储通常会立即发生(它排队,但如果你有连接,它几乎会立即发生)。我认为这是移动数据/更新驱动器内容方面的代价高昂的交易,而不仅仅是查询文件的同步。但是,您可以一次一个地向您的驱动器应用程序添加文件,并且几乎立即上传一个文件 - 在30秒内请求同步超过4次然后失败并且您必须&#39凉爽&#39;一段时间。
我对编程/ Android一般都很陌生 - 只要我学到新东西,我就会意识到我实际上知之甚少,所以如果他们使用Drive API(而不是REST)是更好的解决方案API)我非常欢迎它。
答案 0 :(得分:7)
DriveApi#requestSync可让您请求&#34;同步降低&#34;从服务器到设备。这样,在第二台设备上,您应该能够看到从第一台设备上传的内容。但是,对请求同步的调用是速率限制的(每个设备),以避免滥用并保证Drive API使用合理数量的数据。理想情况下,您应该只在需要时调用请求同步。没有办法提高利率限制。
关于上传完成,在提交上传后,您不应该使用请求同步,因为它不会帮助您(它只会同步但不会同步)。实际上传将尽快发生(基于设备的连接和您的应用通过DrivePreferencesApi指定的偏好设置,默认情况下不受限制)。
如果您想知道实际上传的时间,可以使用CompletionEvents。通过这种方式,您可以通过对实际情况的更多见解来测试您的应用。