3

我在调试环境中注意到了这一点,我必须进行多次重新安装才能测试持久数据存储、初始设置等......它可能与生产无关,但我还是提到这一点只是为了通知其他开发人员。

手动卸载/重新安装(例如,从 IDE)后,应用程序在其应用程序文件夹中创建的任何文件对于查询都不是“可见的”。这同样适用于“编码 DriveID”——它不再有效。

它可能是“设计使然”,但它有效地在应用程序文件夹中创建了“孤儿”,直到通过“ drive.google.com > Manage Apps > [yourapp] > Options > Delete hidden app data ”手动清理。如果应用程序依赖于通过元数据、标题等查找文件,它也会产生问题,因为这些似乎已经消失了。正如我所说,这不是生产问题,但它可能会在开发过程中造成一些挫败感。

任何友好的 Google 员工都可以证实这一点吗?重新安装后还有其他方法可以访问这些文件吗?

4

3 回答 3

4

试试这个方法:

requestSync()用作onConnected():_

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    Drive.DriveApi.requestSync(getGoogleApiClient()).setResultCallback(syncCallback);
}

然后,在其回调中,使用以下命令查询驱动器的内容:

final private ResultCallback<Status> syncCallback = new ResultCallback<Status>() {
    @Override
    public void onResult(@NonNull Status status) {
        if (!status.isSuccess()) {
            showMessage("Problem while retrieving results");
            return;
        }
        query = new Query.Builder()
                .addFilter(Filters.and(Filters.eq(SearchableField.TITLE, "title"),
                        Filters.eq(SearchableField.TRASHED, false)))
                .build();
        Drive.DriveApi.query(getGoogleApiClient(), query)
                .setResultCallback(metadataCallback);
    }
};

然后,在其回调中,如果找到,则使用以下命令检索文件:

final private ResultCallback<DriveApi.MetadataBufferResult> metadataCallback =
        new ResultCallback<DriveApi.MetadataBufferResult>() {
    @SuppressLint("SetTextI18n")
    @Override
    public void onResult(@NonNull DriveApi.MetadataBufferResult result) {
        if (!result.getStatus().isSuccess()) {
            showMessage("Problem while retrieving results");
            return;
        }

        MetadataBuffer mdb = result.getMetadataBuffer();
        for (Metadata md : mdb) {
            Date createdDate = md.getCreatedDate();
            DriveId driveId = md.getDriveId();
        }

        readFromDrive(driveId);
    }
};

任务完成!

希望有帮助!

于 2016-04-27T10:18:49.073 回答
3

Google Play 服务似乎有问题。( https://stackoverflow.com/a/26541831/2228408 ) 对于测试,您可以通过清除 Google Play 服务数据(设置 > 应用程序 > Google Play 服务 > 管理空间 > 清除所有数据)来完成。

或者,此时需要使用 Drive SDK v2 来实现。

于 2014-10-25T03:07:38.270 回答
0

我认为您是正确的,这是设计使然。

通过检查,我得出的结论是,在应用程序将数据放入 AppFolder 文件夹之前,Drive 不会同步到设备,但要尝试和麻烦它。因此,不可能检查是否存在由其他设备或先前实现放置的 AppFolder。我假设这是为了尝试创建一致的全新安装。

我可以看到有几种策略可以解决这个问题:

1)将虚拟数据放在AppFolder上,然后同步并重新检查。

2) 接受在第一种情况下存在重复的可能性,因为您无法根据定义访问现有文件,您将创建一个新副本,并使用自定义元数据提出一个方案来区分同名文件并选择哪个您要保留的一个(本质上是在两个不同的文件中实施冲突合并策略)。

我已经完成了第二个,我有一个更新号来比较来自不同设备的数据并决定我想要哪个版本,因此决定是上传、下载还是不理会。由于我的数据是一个 SQLite 数据库,我还有一些代码只能在更新完成后同步,我故意认为人们一次更新两个设备是愚蠢的,结果是一致的,但不确定哪个会赢。

于 2017-06-19T11:41:10.370 回答