Как «преобразовать» задачу <> в google.api.services.drive.model.File? - PullRequest
0 голосов
/ 27 мая 2019

Я на начальном уровне, и у меня возникают проблемы с использованием методов с разными параметрами и типами возвращаемых данных.

Я создал метод для загрузки файла на Google Drive (через Drive REST API) и другой метод.метод поиска в папке Google Drive.Проблема заключается в том, что тип возвращаемого значения из метода папки поиска - «Задача <*>», и я хотел бы, чтобы найденная папка была отправлена ​​в качестве параметра в метод загрузки файла, просто это параметры com.google.api.services.drive.model.File и AbstractInputStreamContent.

Как мне "преобразовать" объект Task <*> в файл?

Вот методы поиска папки и загрузки файла:

public Task<GoogleDriveFileHolder> searchFolder(String folderName) {
        return Tasks.call(mExecutor, () -> {
            // Retrive the metadata as a File object.
            FileList result = mDriveService.files().list()
                    .setQ("mimeType = '" + "application/vnd.google-apps.folder"  + "' and name = '" + folderName + "' ")
                    .setSpaces("drive")
                    .execute();
            GoogleDriveFileHolder googleDriveFileHolder = new GoogleDriveFileHolder();
            if (result.getFiles().size() > 0) {
                googleDriveFileHolder.setId(result.getFiles().get(0).getId());
                googleDriveFileHolder.setName(result.getFiles().get(0).getName());
            }
            return googleDriveFileHolder;
        });
}

public Task<GoogleDriveFileHolder> uploadFile(File googleDiveFile, AbstractInputStreamContent content) {
        return Tasks.call(mExecutor, () -> {
            // Retrieve the metadata as a File object.
            File fileMeta = mDriveService.files().create(googleDiveFile, content).execute();
            GoogleDriveFileHolder googleDriveFileHolder = new GoogleDriveFileHolder();
            googleDriveFileHolder.setId(fileMeta.getId());
            googleDriveFileHolder.setName(fileMeta.getName());
            return googleDriveFileHolder;
        });
}

1 Ответ

0 голосов
/ 10 июля 2019

Вы не "конвертируете" это.Задача немного похожа на Executors: они выполняют фоновую работу.

Вы можете добавить прослушиватели для получения результата:

searchFolder("my folder")
    .addOnSuccessListener(...your listener...)
    .addOnFailureListener(...your other listener...);

Или вы можете выполнить задачу синхронно в вашем собственном фоновом исполнителе:

 Executors.newSingleThreadExecutor().execute(new Runnable() {
            @Override
            public void run() {
               FileList result = myDriveService.files().list().
                     ... .execute();
               //do something with your result
              }
 });

В этом случае вам нужно будет самостоятельно перехватить IOException в Runnable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...