Создать файл в папке Google Drive - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь создать файл в папке с GoogleDriveApi.Сразу после создания папки я могу использовать DriveFolder из SuccessListener для создания файла внутри.Но я не знаю, как создать файл внутри позже ... Потому что dF.getDriveId().encodeToString() не работает, поэтому я не могу создать объект DriveFolder позже.

CreateFolder:

Drive.getDriveResourceClient(getActivity(), gsa)
    .getRootFolder()
    .continueWithTask(new Continuation<DriveFolder, Task<DriveFolder>>() {
        @Override
        public Task<DriveFolder> then(@NonNull Task<DriveFolder> task) throws Exception {
            DriveFolder parentFolder = task.getResult();
            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle("Foo")
                    .setMimeType(DriveFolder.MIME_TYPE)
                    .setStarred(true)
                    .build();
            return Drive.getDriveResourceClient(getActivity(), gsa).createFolder(parentFolder, changeSet);
        }
    })
    .addOnSuccessListener(new OnSuccessListener<DriveFolder>() {
        @Override
        public void onSuccess(DriveFolder dF){
            //Here I get the DriverFolder Object.
            driveFolder = df;
        }
    });

CreateFile:

final Task<DriveFolder> rootFolderTask = Drive.getDriveResourceClient(getActivity(), gsa).getRootFolder();
final Task<DriveContents> createContentsTask = Drive.getDriveResourceClient(getActivity(), gsa).createContents();
Tasks.whenAll(rootFolderTask, createContentsTask)
    .continueWithTask(new Continuation<Void, Task<DriveFile>>() {
        @Override
        public Task<DriveFile> then(@NonNull Task<Void> task) throws Exception {

            DriveContents contents = createContentsTask.getResult();
            OutputStream outputStream = contents.getOutputStream();
            ByteArrayOutputStream bitmapStream = new ByteArrayOutputStream();
            BitmapFactory.decodeFile("path").compress(Bitmap.CompressFormat.PNG, 100, bitmapStream);
            try {
                outputStream.write(bitmapStream.toByteArray());
            } catch (IOException e1) {
                Log.i("ERROR", "Unable to write file contents.");
            }
            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle("Foo.png")
                    .setMimeType("image/png")
                    .setStarred(true)
                    .build();
            //use driveFolder from CreateFolder
            return Drive.getDriveResourceClient(getActivity(), gsa).createFile(driveFolder, changeSet, contents)
        }
    });

1 Ответ

0 голосов
/ 10 октября 2018

Я решил проблему с открытием FilePicker с Drive.getDriveClient(this, gsa).newOpenFileActivityIntentSender и позволил пользователю выбрать папку.В onActivityResult я получаю DriveId с data.getExtras().get("response_drive_id")Drive.getDriveClient(this, gsa).getDriveId(driveId.getResourceId) я могу воссоздать объект DriveID и загрузить в него файл.Вот и все.

Но тем не менее я хочу знать, как получить driveFolder.getDriveId().getResourceId() в onSuccess после того, как я создал папку.

...