如何将“任务<>”转换为google.api.services.drive.model.File?

时间:2019-05-27 07:02:40

标签: java google-drive-android-api

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

我创建了一种方法(通过Drive REST API)将文件上传到Google云端硬盘,以及一种搜索Google云端硬盘文件夹的方法。问题在于搜索文件夹方法的返回类型是Task <*>,我希望将找到的文件夹作为参数发送到上载文件方法中,只是参数类型是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;
        });
}

1 个答案:

答案 0 :(得分:0)

您不“转换”它。任务有点像执行者:他们从事后台工作。

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

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