Mar*_*een 5 android google-api google-drive-api google-drive-android-api
您好我正在使用Google Drive Api使用AppDataFolder工具存储数据库.我有一个测试应用程序在一台设备上成功运行.我能够上传/更新/删除/下载数据库文件,并将其重新集成到程序中,没有任何问题.
我遇到的问题是,当我想与运行相同应用程序的其他设备共享此数据库时,事情无法按预期工作.示例设备AI上传数据库,设备B - 我想下载数据库但没有找到文件(这种延迟可能在几秒到几小时之间变化很大).原因 - 当使用Api时,它决定何时"同步"数据,因为它排队而不是即时上传.因此,当在一台设备上使用时,这不是问题,因为它需要来自云存储的"同步"文件或等待同步的文件.
我尝试过各种各样的事情,例如尝试列出所有AppDataFolder文件或通过带有可搜索过滤器的查询检索元数据,然后再发出请求更新/删除等等.但是,我无法让它根据需要从根本上选择何时同步.
所以我的实际问题是:如何在我需要时强制Google Drive同步我的文件,即每次发出请求时,都可以使用同一个应用程序在多个设备上实现同步.必须有一个答案,因为我认为这是你使用AppDataFolder的第一个根本原因.
提前致谢
编辑/ UPDATE:
我已经能够在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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
这适用于快速连续3/4次尝试,但是我达到了同步限制和状态消息:
超出了ERRORSync请求速率限制.
是否有任何方法可以提高请求率,因为如果我必须有一个提示用户的应用程序'请稍后再试一次同步 - 不确定你需要多久等到你可以!
解决方案 - 对于港口和我的想法(其价值)
我正在寻找的解决方案(通过电子邮件发送一个发布了同步而没有问题的驱动器应用程序的应用程序开发者)是使用Drive REST Api,而不是更新(和Google首选)的Drive API.我尝试将'requestSync'限制为仅当用户导航到带有Drive选项的片段(而不是每个文件事务)时.然而,这可能会解决大多数情况下的requestSync速率限制,但它仍然可以达到该限制.此外,如果多个设备正在运行应用程序,并且链接到同一个驱动器帐户同时在应用程序中同步/上传/删除文件,则可能会失去同步 - 可能是一种罕见的情况,但仍然可能.在用户体验或应用程序设计方面,我不认为让用户等待同步文件是一个可行的选择.
但好奇 - 实际的Drive应用程序允许您根据需要多次刷新(requestSync?).我在网络界面上快速连续创建了20个文件夹,在创建每个文件夹后,我刷新了手机上的云端硬盘应用程序并同步了20次.谷歌似乎理解同步的重要性,但选择在新的Drive API中确保这一点非常困难.如前所述,将文件上传到云存储通常会立即发生(它排队等候,但是如果你有连接,它几乎会立即发生).我认为这是移动数据/更新驱动器内容方面的代价高昂的交易,而不仅仅是查询文件的同步.但是,您可以一次一个地向您的驱动器应用程序添加文件,并且几乎立即上传一个文件 - 在30秒内请求同步超过4次然后失败并且您必须'冷静下来' 一阵子.
我对编程/ Android一般都很陌生 - 只要我学到新东西,我就会意识到我实际上并不知道,所以如果他们使用Drive API(而不是REST API)是更好的解决方案我会非常欢迎它.
小智 7
DriveApi#requestSync将允许您请求从服务器到设备的"同步".这样,在第二台设备上,您应该能够看到从第一台设备上传的内容.但是,请求同步的呼叫受到速率限制(每个设备)以避免滥用,并保证Drive API使用合理数量的数据.理想情况下,您应该只在需要时调用请求同步.没有办法提高速度限制.
关于上传完成,在提交上传后,您不应该使用请求同步,因为这对您没有帮助(它只会同步但不能同步).实际上传将尽快发生(基于设备的连接性和应用程序通过DrivePreferencesApi指定的首选项,默认情况下不受限制).
如果您想知道实际上传的时间,可以使用CompletionEvents.通过这种方式,您可以通过对实际情况的更多见解来测试您的应用.