gpt4 book ai didi

Android Google Play/Drive Api

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:25:39 27 4
gpt4 key购买 nike

嗨,我正在使用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();
}
}
});

这对于快速连续进行3/4次尝试非常有效,但是我达到了同步限制和状态消息:

ERRORSync request rate limit exceeded.



有什么方法可以提高请求率,因为如果我必须有一个提示用户“请稍后再尝试同步-不知道需要多长时间才能完成”的应用程序,这真的不是很理想!

解决方案-排序和我的想法(值(value)多少)

我要寻求的解决方案(在给应用程序开发人员发送电子邮件后,该应用程序开发人员发布了可以同步而没有问题的驱动器应用程序)是使用Drive REST Api,而不是较新的(也是Google首选的)Drive API。我尝试将“requestSync”限制为仅当用户使用“驱动器”选项(而不是每个文件事务)导航到一个 fragment 时。但是,这可能会在很大程度上解决requestSync速率限制,但仍然可以达到该限制。同样,如果有多个设备正在运行该应用程序,并且链接到同一个Drive帐户的应用程序中同时都在同步/上载/删除文件,则可能会丢失同步-也许是一种罕见的情况,但仍然可能。从用户体验或应用程序设计的角度来看,让用户等待同步文件并不可行。

不过很好奇-实际的云端硬盘应用可让您随意刷新(requestSync?)次。我快速连续地在Web界面上创建了20个文件夹,创建完每个文件夹后,我刷新了手机上的“云端硬盘”应用,并同步了全部20次。看起来Google理解了同步的重要性,但选择使其困难,以确保在其新的Drive API中做到这一点。如前所述,通常将文件上传到云存储通常是立即进行的(已排队,但是如果您具有连接性,则几乎立即发生)。我本来以为就移动数据/更新驱动器内容而言,这是一笔昂贵的交易,而不仅仅是查询文件的同步。但是,您可以一次将文件一次添加到您的驱动器应用程序中,然后几乎一次一次将它们上传一次。在这种情况下,您请求在30秒内同步4次以上,然后失败,您必须“冷静下来” ' 一阵子。

我一般对编程/Android还是陌生的-一旦我学到新知识,我就会意识到我实际上并不了解,所以如果使用Drive API(而不是REST API),如果它们是更好的解决方案,我会非常欢迎。

最佳答案

DriveApi#requestSync将让您请求从服务器到设备的“同步向下”。这样,在第二台设备上,您应该能够看到从第一台设备上载的内容。但是,请求同步的调用受到速率限制(每个设备),以避免滥用并确保Drive API合理使用数据量。理想情况下,仅在需要时才应调用请求同步。无法提高速率限制。

关于上传完成,提交上传后,您不应使用请求同步,因为这将无济于事(它仅同步但不同步)。实际的上传将尽快进行(基于设备的连接性以及您的应用程序通过DrivePreferencesApi指定的首选项(默认情况下不受限制))。

如果您想知道实际上传的时间,可以使用CompletionEvents。这样,您可以对实际情况进行更多的洞察来测试您的应用程序。

关于Android Google Play/Drive Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31203255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com