我尝试编写GWT应用程序代码,我需要使用RPC从服务器端获取结果。我遵循了GWT RPC教程并最终得到了一些商品。但是当我调试我的程序时,我看到我的程序跳过了onFailure和onSuccess方法,所以我得到了nullpointerexception。 这是我实施的必要部分。
IRecordServiceAsync recordSvc = GWT.create(IRecordService.class);
private class RecordCallBack implements AsyncCallback<Records> {
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
public void onSuccess(Records result) {
records = result.getRecords();
}
}
public void onModuleLoad() {
setFileGridData(getRecords());
.
.
.
}
public HashMap getRecords() {
recordSvc.getRecords(recordclass, new RecordCallBack());
return this.records;
}
正如我所说的,我的程序skp是onFailure和onSuccess部分,因为我的记录值变为空。
感谢您的帮助。
答案 0 :(得分:3)
你必须认为异步。方法getRecords()
首先对您的服务进行异步调用,然后立即返回records
字段,该字段始终为null(假设到目前为止从未修改过)。< / p>
您必须等待要返回的权限(由onSuccess
/ onFailure
处理)。而且,一般情况下,永远不要使用依赖异步调用的getter,而是将应用程序设计为wait
以获取响应/事件。
在您的情况下,只需将异步调用放入onModuleLoad()
并仅在onSuccess()
内,请使用setFileGridData(result.getRecords())
,完全避免使用getter。
答案 1 :(得分:1)
您正在创建新的RecordCallBack.So onFailure,并且将在新实例上调用onSuccess。而不是这样做,您可以尝试按照
public void getRecords() {
recordSvc.getRecords(recordclass, this);
}
答案 2 :(得分:1)
经过所有解释后
您的代码应该
onModuleLoad(){
recordSvc.getRecords(new RecordCallBack<Records>(){
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
public void onSuccess(Records result) {
records = result.getRecords();
setFileGridData(records);
}
});
}