【问题标题】:How to back up room database in Google Drive Android?如何在 Google Drive Android 中备份房间数据库?
【发布时间】:2018-04-12 05:17:30
【问题描述】:

这可能是个愚蠢的问题,但我找不到任何解决方案。我需要知道如何备份房间数据库并使用 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?提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多