所以我知道驱动器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秒左右后,文件出现在谷歌驱动器的服务器上,几秒钟后会出现一个相同的文件。因此,结果是创建了两个相同的文件。
为什么会这样?我怎样才能防止它发生?