Android Studio Google Drive AppFolder Резервное копирование и восстановление (файлы баз данных) - PullRequest
0 голосов
/ 25 июня 2018

Эй, я следил за QuickStart на Google Диске на github:

https://github.com/gsuitedevs/android-samples/blob/master/drive/demos/app/src/main/java/com/google/android/gms/drive/sample/demo/CreateFileInAppFolderActivity.java

Я использовал SCOPE_APPFOLDER, поэтому, когда я запустил приложение, он попросил меня войти в учетную запись Google идать доступ, чтобы открыть папку приложения, после того, как я согласен, я захожу на google drive и да, он открывает папку для моего приложения в "Диспетчере приложений" (1 КБ).enter image description here

Мой вопрос: 1) Как загрузить файл базы данных (у меня есть путь к нему) в Google Drive AppFolder?2) Как я могу загрузить те файлы баз данных, которые я буду загружать из AppFolder, и поместить их в нужный мне путь?

Я написал некоторый код, который делает резервную копию этих файлов баз данных НО внутри устройства, и это выглядит так:

    //Back Up 
private void BackUp() {
    try {
        final String inFileName = "/data/user/0/com******/databases/**********";
        File dbFile = new File(inFileName);
        FileInputStream fis = new FileInputStream(dbFile);
        String outFileName = Environment.getExternalStorageDirectory() + "/********";

        // Open the empty db as the output stream
        OutputStream output = new FileOutputStream(outFileName);
        // Transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        // Close the streams
        output.flush();
        output.close();
        fis.close();
    } catch (Exception e) {

    }
}

Как я могу использовать что-то вроде приведенного выше кода для Google Drive AppFolder ????

Ниже приведен код, который я использую дляGoogle Drive Stufe

//Path of the file
 final String inFileName = "/data/user/0/com.******/databases/Categor****";
 File dbFile = new File(inFileName);

И я использую это для создания AppFolder:

    private void createFileInAppFolder() {
    final Task<DriveFolder> appFolderTask = getDriveResourceClient().getAppFolder();
    final Task<DriveContents> createContentsTask = getDriveResourceClient().createContents();
    Tasks.whenAll(appFolderTask, createContentsTask)
            .continueWithTask(task -> {
                DriveFolder parent = appFolderTask.getResult();
                DriveContents contents = createContentsTask.getResult();
                OutputStream outputStream = contents.getOutputStream();
                try (Writer writer = new OutputStreamWriter(outputStream)) {
                    writer.write("Hello World!");
                }

                MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                        .setTitle("New file")
                        .setMimeType("text/plain")
                        .setStarred(true)
                        .build();
                final String inFileName = "/data/user/0/com.camel.work_list/databases/CategoriesSpinner";
                File dbFile = new File(inFileName);
                FileInputStream fis = new FileInputStream(dbFile);

                MetadataChangeSet test = new MetadataChangeSet(fis);

                return getDriveResourceClient().createFile(parent, changeSet, contents);
            })
            .addOnSuccessListener(this,
                    driveFile -> {
                        showMessage(getString(R.string.file_created));
                        //finish();
                    })
            .addOnFailureListener(this, e -> {
                Log.e(TAG, "Unable to create file", e);
                showMessage(getString(R.string.file_create_error));
                //finish();
            });
}

Так что из этого кода я понимаю, что когда он открывает AppFolder, он создает какой-то текстовый файл с "Hello World""

Как я могу взять свой файл из базы данных и загрузить в этот AppFolder?и Как я могу загрузить / восстановить эти файлы и поместить их обратно в папку приложения на устройстве?

Спасибо, ребята:)

1 Ответ

0 голосов
/ 26 июня 2018
  1. Работа с папкой Application Data

Папка для конкретного приложения доступна с помощью псевдонима appDataFolder.Этот псевдоним можно использовать как любой другой идентификатор папки;например, при выводе списка файлов, расположенных непосредственно в папке вашего приложения, или при создании файлов с использованием appDataFolder в качестве родительского.

Вставка файла в папку Application Data

File fileMetadata = new File();
fileMetadata.setName("config.json");
fileMetadata.setParents(Collections.singletonList("appDataFolder"));
java.io.File filePath = new java.io.File("files/config.json");
FileContent mediaContent = new FileContent("application/json", filePath);
File file = driveService.files().create(fileMetadata, mediaContent)
    .setFields("id")
    .execute();
System.out.println("File ID: " + file.getId());

Следуйте инструкциям Загрузка файлов

  • Загрузка файла - files.get с ресурсом alt = media file
  • Загрузите и экспортируйте Google Doc - files.export
  • Свяжите пользователя с файлом - webContentLink из файлового ресурса
...