gpt4 book ai didi

android - 如何在 Google Drive Android 中备份房间数据库?

转载 作者:行者123 更新时间:2023-12-02 04:30:02 29 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我找不到任何解决方案。我需要知道如何备份房间数据库并使用 Google Drive 检索它。那么房间数据库的 MIME 类型是什么?谁能知道该怎么做?让我发布到目前为止我尝试过的内容:

 private void saveFileToDrive(File file) {

mDriveClient = Drive.getDriveClient(this, GoogleSignIn.getLastSignedInAccount(this));
// Build a drive resource client.
mDriveResourceClient =
Drive.getDriveResourceClient(this, GoogleSignIn.getLastSignedInAccount(this));

final Task<DriveFolder> rootFolderTask =mDriveResourceClient.getRootFolder();
final Task<DriveContents> createContentsTask =mDriveResourceClient.createContents();
Tasks.whenAll(rootFolderTask, createContentsTask)
.continueWithTask(new Continuation<Void, Task<DriveFile>>() {
@Override
public Task<DriveFile> then(@NonNull Task<Void> task) throws Exception {
DriveFolder parent = rootFolderTask.getResult();
DriveContents contents = createContentsTask.getResult();
// OutputStream outputStream = contents.getOutputStream();
// try (Writer writer = new OutputStreamWriter(outputStream)) {
// writer.write("Hello World!");
// }
OutputStream oos = contents.getOutputStream();
if (oos != null) try {
InputStream is = new FileInputStream(file);
byte[] buf = new byte[4096];
int c;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
}
finally { oos.close();}

MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("mm.db")
.setMimeType("application/x-sqlite3")
.setStarred(true)
.build();

return mDriveResourceClient.createFile(parent, changeSet, contents);
}
})
.addOnSuccessListener(this,
new OnSuccessListener<DriveFile>() {
@Override
public void onSuccess(DriveFile driveFile) {
// showMessage(getString(R.string.file_created,
// driveFile.getDriveId().encodeToString()));
finish();
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Unable to create file", e);
// showMessage(getString(R.string.file_create_error));
finish();
}
});
}

如何经常备份但使用房间数据库android?提前致谢。

最佳答案

你可以引用这个thread .可能存在可靠性问题,因为 Google Drive 是一个独立于您自己的应用程序。只有当您的应用未主动使用数据库时,Drive 才应使用该文件。我不知道 Drive 是否正在采取任何措施来确保这一点。否则,您可能会损坏数据。如果用户在云端硬盘完成任何同步工作之前修改了多台设备上的数据(例如,其中一台设备目前处于离线状态),您也会收到数据损坏。它还指出SQLite需要直接文件系统访问数据库。 Room不会改变这一点。

关于android - 如何在 Google Drive Android 中备份房间数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49788527/

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