我的GWT应用程序是在IDEA中编写的。为了进行gwt RPC调用,我创建了两个接口。 第一个:
RemoteServiceRelativePath("ServerManagement")
public interface ServerManagement extends RemoteService {
String userLogin(String customerId, String login, String password) throws Exception;
ArrayList<PropertyItem> getProperties(String customerId) throws Exception;
void receive(String customerId) throws Exception;
和第二个异步的:
public interface ServerManagementAsync {
void userLogin(String customerId, String login, String password, AsyncCallback<String> asyncCallback);
void getProperties(String customerId, AsyncCallback<ArrayList<PropertyItem>> asyncCallback);
void receive(String customerId, AsyncCallback<String> asyncCallback);
}
但是在两个接口中,带有“receive”方法的行没有红色,而ide返回消息:
Methods of asynchronous remote service 'ServerManagementAsync' are not consistent with 'ServerManagement' less... (Ctrl+F1)
This inspection reports any inconsistency between a methods of synchronous and asynchronous interfaces of remote service
如何解决这个问题?
答案 0 :(得分:2)
Async接口必须是:
public interface ServerManagementAsync {
void userLogin(String customerId, String login, String password, AsyncCallback<String> asyncCallback);
void getProperties(String customerId, AsyncCallback<ArrayList<PropertyItem>> asyncCallback);
void receive(String customerId, AsyncCallback<Void> asyncCallback);
}
注意AsyncCallback&lt; Void&gt;在接收方法中,必须使用同步接口中方法返回的类型对AsyncCallback进行参数化。
抱歉我的英语不好。 欢呼声。
答案 1 :(得分:0)
我同意上面的答案。我还想提一下,当IntelliJ IDEA 12试图在构建时的target / generated-sources文件夹中自动生成异步接口时,我看到完全相同的错误,“异步远程服务的方法不一致”。我相信这是IDEA中的一个错误。手动将函数添加到generated-sources目录中生成的Async接口,为我修复了错误,实际上导致IDEA在将来的编译中正确生成文件,即使我删除了generated-sources文件夹并重新编译。
在Nikitin的情况下,它似乎是他手动编码的Async接口“receive”方法的AsyncCallback参数被输入的结果
AsyncCallback<String> // does not work - String is not the synchronous method's return type
什么时候应该
AsyncCallback<Void> // works, type matches with the synchronous method's return type
recieve方法的AsyncCallback类型需要为Void,因为它与ServerManagement.java中定义的同步接口中的receive方法的void返回类型匹配。
以下是截图: