我是初学者,无法使用具有不同参数和返回类型的方法。
我创建了一种方法(通过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;
});
}
答案 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