我正在开发一个 JavaFX 项目,在该项目中我使用Task进行网络调用。不幸的是,我一直无法找到如何向它传递参数。我搜索了很多链接,但没有一个提供。来自 java2s 的一个链接声称他们正在通过,但代码并未反映这一点。
从下面的代码中可以看出,我使用了一个 for 循环并在 URL 中传递了 RestGroupAccount 的 ID 参数。这次没关系,因为我无论如何都需要所有的 RestCanvas。
但我有兴趣知道如何为 Task 提供参数
代码 :
private Task<List<RestCanvas>> fetchCanvases = new Task<List<RestCanvas>>() {
@Override
protected List<RestCanvas> call() throws Exception {
List<RestCanvas> list = new ArrayList<>();
try{
for(RestGroupAccount groupAccount : groupAccounts) {
RestTemplate rest = StaticRestTemplate.getRest();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + StaticRestTemplate.jsessionid);
HttpEntity<RestCanvas> requestEntity = new HttpEntity<>(requestHeaders);
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<RestCanvas[]> responseEntity = rest.exchange(getCanvasForGroupAccount+groupAccount.getGroupId(), HttpMethod.GET, requestEntity, RestCanvas[].class);
RestCanvas[] restCanvasArray = responseEntity.getBody();
Collections.addAll(list, restCanvasArray);
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
};
Run Code Online (Sandbox Code Playgroud)
如果需要更多信息,请告诉我。谢谢你。
我有一个类似的需求,我需要创建将接收文件并对其执行任务的任务。在我的例子中,我需要对多个地方的文件做不同的事情,所以我创建了以下类:
public abstract class FileOperationTask<V> extends Task<V> {
protected File file;
public FileOperationTask(File file) {
this.file = file;
}
}
Run Code Online (Sandbox Code Playgroud)
这允许我在我的控制器中定义以下内容:
FileOperationTask<List<RaffleTicket>> task = new FileOperationTask<List<RaffleTicket>>(file){
@Override
protected List<RaffleTicket> call() throws Exception {
this.file.toString();
return null;
}
};
new Thread(task).run();
Run Code Online (Sandbox Code Playgroud)
如您所见,我能够对 File 对象进行操作,并且实现我的异步任务现在或多或少与实现普通任务相同。
如果您需要多次使用 Task 中的代码,则应考虑创建非匿名子类,并在每次需要时使用构造参数对其进行实例化。
在您的示例中,这可能是:
private Task<List<RestCanvas>> fetchCanvases = new MyTask(getCanvasForGroupAccount + groupAccount.getGroupId());
// ...
// please don't use this name :)
private static class MyTask extends Task<List<RestCanvas>> {
private final String id;
public MyTask(String id) {
this.id = id;
}
@Override
protected List<RestCanvas> call() throws Exception {
List<RestCanvas> list = new ArrayList<>();
try{
for(RestGroupAccount groupAccount : groupAccounts) {
RestTemplate rest = StaticRestTemplate.getRest();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + StaticRestTemplate.jsessionid);
HttpEntity<RestCanvas> requestEntity = new HttpEntity<>(requestHeaders);
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<RestCanvas[]> responseEntity = rest.exchange(id, HttpMethod.GET, requestEntity, RestCanvas[].class);
RestCanvas[] restCanvasArray = responseEntity.getBody();
Collections.addAll(list, restCanvasArray);
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3644 次 |
| 最近记录: |