java - 如何将 "convert"任务 <> 发送到 google.api.services.drive.model.File?

标签 java google-drive-android-api

我处于初学者水平,在使用具有不同参数和返回类型的方法时遇到困难。

我创建了一种将文件上传到 Google 云端硬盘的方法(通过 Drive REST API)和另一种搜索 Google 云端硬盘文件夹的方法。问题是搜索文件夹方法的返回类型是任务<*>,我希望将找到的文件夹作为参数发送到上传文件方法,只是参数类型是com.google.api。 services.drive.model.File 和 AbstractInputStreamContent。

我应该如何将任务<*>对象“转换”为文件?

以下是搜索文件夹和上传文件的方法:

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;
        });
}

最佳答案

您没有“转换”它。任务有点像执行器:它们做后台工作。

您可以添加监听器来检索结果:

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
              }
 });

在这种情况下,您需要自己在 Runnable 中捕获 IOException

关于java - 如何将 "convert"任务 <> 发送到 google.api.services.drive.model.File?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321177/

相关文章:

android - "Cannot find DriveId. Are you authorized to view this file?": Even if EXISTING_FOLDER_ID is set manually

java - 使用 Java 和 Google Drive API V3 将文件上传到共享的 Google 云端硬盘位置?

java - 不要求输入

java - 如何在 Gradle 中指定 servlet-api 版本?

java - 如何使用 Google Drive Java Client Library 获取查询 Google Drive 的文件 ID

android - 即使在删除应用程序后,Google Drive Android API 也会返回成功

java - Google Drive API Android/Java - 文件列表始终为空

java - SWT/JFace 还是 Eclipse RCP?

java - 在 Java 中实现 SIFT

java - 如何使用 Zstd-jni 和字节缓冲区解压缩大文件