【问题标题】:How to "convert" Task<> to google.api.services.drive.model.File?如何将 Task<>“转换”为 google.api.services.drive.model.File?
【发布时间】:2019-05-27 07:02:40
【问题描述】:

我处于初学者水平,无法使用具有不同参数和返回类型的方法。

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

我应该如何将 Task 对象“转换”为 File?

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

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

【问题讨论】:

  • 上传文件后你想得到什么?是fileId?

标签: java google-drive-android-api


【解决方案1】:

您不会“转换”它。 Task 有点像 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
              }
 });

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

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多