您好,我正在使用 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 次尝试效果很好,但是我达到了同步限制和状态消息:
错误同步请求速率超出限制。
有没有什么方法可以提高请求率,因为如果我必须有一个应用程序提示用户“请稍后重试同步 - 但不确定您需要等待多长时间才能同步!”,这并不是真正理想的!
解决方案 - 各种,以及我的想法(无论其价值)
我想要的解决方案(在向应用程序开发人员发送电子邮件后,他发布了可以毫无问题地同步的驱动器应用程序)是使用 Drive REST Api,而不是较新的(也是 Google 首选的)Drive API。我尝试将“requestSync”限制为仅当用户使用“驱动器”选项导航到片段时(而不是每个文件事务)。然而,这可能会在很大程度上解决 requestSync 速率限制,但它仍然可能达到该限制。此外,如果多个设备正在运行该应用程序,并且链接到同一云端硬盘帐户,并且在该应用程序中同时同步/上传/删除文件,则可能会丢失同步 - 也许是一种罕见的情况,但仍然有可能。我不认为让用户等待同步文件在用户体验或应用程序设计方面是一个可行的选择。
不过很好奇 - 实际的云端硬盘应用程序可以让您根据需要多次刷新(requestSync?)。我在网络界面上快速连续创建了 20 个文件夹,创建每个文件夹后,我刷新手机上的云端硬盘应用程序,它同步了 20 次。谷歌似乎了解同步的重要性,但选择让同步变得相当困难,以在新的 Drive API 中确保这一点。如前所述,将文件上传到云存储通常会立即发生(它会排队,但是如果您有连接,它几乎会立即发生)。我本以为这是移动数据/更新驱动器内容方面成本高昂的事务,而不仅仅是查询文件同步。不过,您可以一次向您的云端硬盘应用程序添加一个文件,它几乎会立即一次上传一个文件 - 当您在 30 秒内请求同步超过 4 次时,它就会失败,您必须“冷静下来” ' 一阵子。
一般来说,我对编程/Android非常陌生 - 一旦我学习了新东西,我就意识到我实际上知道的很少,所以如果他们是使用 Drive API(而不是 REST API)的更好的解决方案,我会非常欢迎。