Android Google驱动器api创建脱机文件会导致创建2个文件

时间:2018-01-20 19:02:39

标签: android google-drive-api google-drive-android-api

所以我知道驱动器API的局限性以及它如何在本地缓存,以及如何与服务器同步它。

我正在尝试创建一个简单的文件,但发生的事情是当我离线创建文件并上线时,它会在服务器上生成两个相同的文件。我从这段代码中得到了这种行为,这几乎与示例代码相同:

    final Task<DriveFolder> rootFolderTask = mDriveResourceClient.getRootFolder();
    final Task<DriveContents> contentsTask = mDriveResourceClient.createContents();
    Tasks.whenAll(rootFolderTask, contentsTask)
            .continueWithTask(new Continuation<Void, Task<DriveFile>>() {
                @Override
                public Task<DriveFile> then(@NonNull Task<Void> task) throws Exception {
                    DriveFolder folder = rootFolderTask.getResult();
                    DriveContents contents = contentsTask.getResult();

                    OutputStream outputStream = contents.getOutputStream();
                    try {
                        Writer writer = new OutputStreamWriter(outputStream);
                        writer.write("Hello World");
                        writer.close();
                    }
                    catch (IOException e) {}

                    MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                            .setTitle("Hello_World.txt")
                            .setMimeType("text/plain")
                            .setStarred(true)
                            .build();

                    return mDriveResourceClient.createFile(folder, changeSet, contents);
                }
            })
            .addOnSuccessListener(new OnSuccessListener<DriveFile>() {
                @Override
                public void onSuccess(DriveFile driveFile) {
                    Log.v(TAG, "File write complete");
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.v(TAG, "File write failed");
                }
            });

此代码与Creating files in the GDAA guide几乎相同。

会发生什么:

  • 启用飞行模式(离线)

  • 打开应用,运行代码

  • 代码成功(文件在本地缓存)

  • 退出应用

  • 关闭飞行模式(上线)

现在结果是,在10秒左右后,文件出现在谷歌驱动器的服务器上,几秒钟后会出现一个相同的文件。因此,结果是创建了两个相同的文件。

为什么会这样?我怎样才能防止它发生?

0 个答案:

没有答案