Java GWT RPC AsynCallback跳过onSucces和onFail方法
我尝试编写一个GWT应用程序,需要使用RPC从服务器端获取结果。我遵循了GWT RPC教程,最终得到了一些产品。但是当我调试我的程序时,我看到我的程序跳过了onFailure和onSuccess方法,所以我得到了nullpointerexception。 以下是我实现的必要部分Java GWT RPC AsynCallback跳过onSucces和onFail方法,java,gwt,asynchronous,callback,rpc,Java,Gwt,Asynchronous,Callback,Rpc,我尝试编写一个GWT应用程序,需要使用RPC从服务器端获取结果。我遵循了GWT RPC教程,最终得到了一些产品。但是当我调试我的程序时,我看到我的程序跳过了onFailure和onSuccess方法,所以我得到了nullpointerexception。 以下是我实现的必要部分 IRecordServiceAsync recordSvc = GWT.create(IRecordService.class); private class RecordCallBack implements Asyn
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;
}
IRecordServiceAsync recordSvc=GWT.create(IRecordService.class);
私有类RecordCallBack实现异步回调{
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
成功时公开作废(记录结果){
records=result.getRecords();
}
}
moduleload()上的公共void{
setFileGridData(getRecords());
.
.
.
}
公共HashMap getRecords(){
getRecords(recordclass,new RecordCallBack());
将此文件归还给您的记录;
}
正如我所说,我的程序skpis是onFailure和onSuccess部分,因为我的记录值变为null
谢谢您的帮助。您正在创建新的RecordCallBack。因此,将对新实例调用onFailure和onSuccess。您可以尝试以下操作,而不是执行此操作
public void getRecords() {
recordSvc.getRecords(recordclass, this);
}
您正在创建新的RecordCallBack。因此将对新实例调用onFailure和onSuccess。您可以尝试以下操作,而不是这样做
public void getRecords() {
recordSvc.getRecords(recordclass, this);
}
你必须异步思考。方法getRecords()
,首先对您的服务进行异步调用,然后立即返回records
字段,该字段将始终为空(假设到目前为止从未修改)
您必须等待响应返回(由onSuccess
/onFailure
处理)。一般来说,不要使用依赖异步调用的getter,而是将应用程序设计为等待响应/事件
在您的情况下,只需将异步调用放入onModuleLoad()
,并且仅在onSuccess()中使用setFileGridData(result.getRecords())
,完全避免使用getter。您必须异步思考。方法getRecords()
,首先对您的服务进行异步调用,然后立即返回records
字段,该字段将始终为空(假设到目前为止从未修改)
您必须等待响应返回(由onSuccess
/onFailure
处理)。一般来说,不要使用依赖异步调用的getter,而是将应用程序设计为等待响应/事件
在您的情况下,只需将异步调用放入onModuleLoad()
,并且仅在onSuccess()中使用setFileGridData(result.getRecords())
,完全避免使用getter
您的代码应该
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);
}
});
}
onModuleLoad(){
getRecords(新的RecordCallBack(){
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
成功时公开作废(记录结果){
records=result.getRecords();
setFileGridData(记录);
}
});
}
在所有的解释之后
您的代码应该
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);
}
});
}
onModuleLoad(){
getRecords(新的RecordCallBack(){
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
成功时公开作废(记录结果){
records=result.getRecords();
setFileGridData(记录);
}
});
}
Hint:asynchronous==non-blocking.Hint:asynchronous==non-blocking.mable replication of Hint:asynchronous==non-blocking.I可能重复我已经尝试过了,但recordclass variable的值仍然为空。我刚刚更正了您所说的部分,但没有任何更改。你需要哪一部分?我会编辑它。我试过了,但是我仍然得到了recordclass变量的空值。我刚刚更正了你说的部分,但是没有任何改变。你需要哪一部分?我会编辑它。我在“recordSvc.getRecords(recordclass,this);”中添加了这一行onModuleLoad和我添加了setFileGridData(getRecords());对于onSuccess,我还调用了onSuccess(recordclass);这在filegrid进程中非常重要。我明白你想说什么,但我想我无法实现我的代码。这仍然提供空值。您不必调用onSuccess()
。我在“recordSvc.getRecords(recordclass,this);”中添加了这一行onModuleLoad和我添加了setFileGridData(getRecords());对于onSuccess,我还调用了onSuccess(recordclass);这在filegrid进程中非常重要。我明白你想说什么,但我想我无法实现我的代码。这仍然提供空值。您不必调用onSuccess()
。当响应将从服务器返回时,它将返回。