嗨,我正在使用Google Drive Api通过AppDataFolder工具存储数据库。我有一个在一个设备上成功运行的测试应用程序。我能够上载/更新/删除/下载数据库文件,并将其重新集成到程序中而没有任何问题。
我遇到的问题是,当我想与运行同一应用程序的另一台设备共享此数据库时,事情却无法按预期进行。设备A的示例我上载数据库,设备B的示例-我想下载数据库,但未找到文件(此延迟可能从几秒到几小时变化很大)。这样做的原因-使用Api时,它决定何时“同步”数据,因为数据已排队,而不是立即上传。因此,当在一台设备上使用时,这不是问题,因为它要么从云存储中获取“已同步”文件,要么等待同步文件。
我曾尝试过各种尝试,例如尝试列出所有AppDataFolder文件或在请求更新/删除等之前通过带有可搜索过滤器的查询检索元数据。但是,我根本无法使其按需工作,因为它选择了同步时间。
所以我的实际问题是:当我希望文件每次发送请求时,如何强制Google云端硬盘同步文件,以便使用同一应用在多个设备上实现同步。必须有一个答案,因为我认为这是您首先使用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();
}
}
});
ERRORSync request rate limit exceeded.
最佳答案
DriveApi#requestSync将让您请求从服务器到设备的“同步向下”。这样,在第二台设备上,您应该能够看到从第一台设备上载的内容。但是,请求同步的调用受到速率限制(每个设备),以避免滥用并确保Drive API合理使用数据量。理想情况下,仅在需要时才应调用请求同步。无法提高速率限制。
关于上传完成,提交上传后,您不应使用请求同步,因为这将无济于事(它仅同步但不同步)。实际的上传将尽快进行(基于设备的连接性以及您的应用程序通过DrivePreferencesApi指定的首选项(默认情况下不受限制))。
如果您想知道实际上传的时间,可以使用CompletionEvents。这样,您可以对实际情况进行更多的洞察来测试您的应用程序。
关于Android Google Play/Drive Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31203255/