Java 在另一个内部调用回调
您能建议我,在调用成功后,如何调用第一个AsyncCallback的内部,第二个AsyncyCallback?我使用gwt rpc并将数据加载到ui中,在调用成功时的第一个AsyncCallback方法后,我必须调用另一个AsyncCallback,以执行第一个AsyncCallback的下一部分,并将数据从db加载到ui中:Java 在另一个内部调用回调,java,gwt,Java,Gwt,您能建议我,在调用成功后,如何调用第一个AsyncCallback的内部,第二个AsyncyCallback?我使用gwt rpc并将数据加载到ui中,在调用成功时的第一个AsyncCallback方法后,我必须调用另一个AsyncCallback,以执行第一个AsyncCallback的下一部分,并将数据从db加载到ui中: void show(int last) { AsyncCallback<List<C>> callback = new AsyncCal
void show(int last) {
AsyncCallback<List<C>> callback = new AsyncCallback<List<C>>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(List<C> result) {
panelCharts.clear();
for (C c : result) {
first = new Chart()
.setType(Series.Type.SPLINE)
.setSizeToMatchContainer()
.setLegend(
new Legend()
.setLayout(Legend.Layout.VERTICAL)
.setAlign(Legend.Align.RIGHT)
.setVerticalAlign(
Legend.VerticalAlign.TOP)
.setX(-10).setY(100)
.setBorderWidth(0))
.setZoomType(Chart.ZoomType.X_AND_Y);
first.setStyleName("chart");
Series series = first
.createSeries()
.setName("Summer")
.setPoints(
new Number[] { 7.0, 6.9, 9.5, 14.5, 18.4,
21.5, 25.2, 26.5, 23.3, 18.3, 13.9,
9.6 });
first.setCredits(new Credits().setEnabled(false));
first.addSeries(series);
first.setChartTitleText(c.getName());
AsyncCallback<List<M>> callbackA = new AsyncCallback<List<M>>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(List<M> result) {
for (M m : result) {
Series serie = firstChart.createSeries().setName(
m.getDName());
first.addSeries(serie);
}
}
};
rpcService.getKList(ID, callbackA);
panelCharts.add(first);
}
}
};
rpcService.getList(last, callback);
void显示(int-last){
AsyncCallback callback=新的AsyncCallback(){
失败时的公共无效(可丢弃){
}
成功时公开作废(列表结果){
面板图;
对于(C:结果){
第一个=新图表()
.setType(系列.Type.SPLINE)
.setSizeToMatchContainer()
.setLegend(
新传奇()
.setLayout(图例.布局.垂直)
.setAlign(图例.Align.RIGHT)
白蜡木(
图例。垂直对齐。顶部)
.setX(-10).setY(100)
.1(宽度(0))
.setZoomType(Chart.ZoomType.X_和Y);
第一,名称(“图表”);
系列=第一个
.createSeries()
.setName(“夏季”)
.设定点(
新数字【】{7.0,6.9,9.5,14.5,18.4,
21.5, 25.2, 26.5, 23.3, 18.3, 13.9,
9.6 });
首先.setCredits(new Credits().setEnabled(false));
第一,添加系列(系列);
首先,setChartTitleText(c.getName());
AsyncCallback callbackA=新的AsyncCallback(){
失败时的公共无效(可丢弃){
}
成功时公开作废(列表结果){
for(M:结果){
Series serie=firstChart.createSeries().setName(
m、 getDName());
第一,addSeries(serie);
}
}
};
getKList(ID,callbackA);
小组图。添加(第一);
}
}
};
rpcService.getList(最后一个,回调);
}如果我看得正确,您正在for循环中执行第二个异步RPC。 在我看来,这不是一个好主意 请记住,RPC调用是异步的,这意味着它们不会阻止脚本的执行。 您的代码可能会运行整个for循环,并在第一个内部RPC调用返回之前将所有视图元素添加到“panelCharts”。内部RPC调用返回的顺序也没有保证
private void iterateElements(Iterator<C> iter){
/*** ALL THE OTHER STUFF ***/
AsyncCallback<List<M>> callbackA = new AsyncCallback<List<M>>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(List<M> result) {
/*** ALL THE OTHER STUFF ***/
// Add view
panelCharts.add(first);
//If next element, do next!
if(iter.hasNext()){
iterateElements(iter.next());
}
}
});
}
private void迭代器元素(迭代器iter){
/***所有其他的东西***/
AsyncCallback callbackA=新的AsyncCallback(){
失败时的公共无效(可丢弃){
}
成功时公开作废(列表结果){
/***所有其他的东西***/
//添加视图
小组图。添加(第一);
//如果是下一个元素,请执行下一步!
if(iter.hasNext()){
迭代元素(iter.next());
}
}
});
}
我的建议是在一个额外的方法中使用迭代器对列表进行迭代,就像这样。查看如何仅在返回当前元素的RPC调用后请求下一个元素。这样可以保证顺序,并且只有在所有数据都可用的情况下,才可以将小部件添加到视图中。上面的代码中到底有什么不起作用?第一个onsuccess工作,我得到数据,但第二个异步onsuccess不起作用。您是否遇到异常?可能会调用
onFailure
。从代码本身来看,它应该可以工作