我是新手,我无法弄清楚这个错误意味着什么。
我已经尝试使用谷歌搜索,但从我发现的内容中无法理解。
我需要与API交互以将票证发布到远程服务器,我从我正在关注的教程中获取此代码。
在这段代码中,我收到了这个错误:
HelpDeskTestService类型中的postToRemoteServer(String)方法 不适用于参数(String,new 的AsyncCallback(){})
sendButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
HelpDeskTestService.postToRemoteServer(
"http://xx.xx.xx.xx/sdpapi/request/",
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
Window.alert("Failure getting XML through proxy");
}
@Override
public void onSuccess(String result) {
processXML(result);
}
});
}
});
以下是同步接口的代码:
public String postToRemoteServer(final String serviceUrl)
throws HelpDeskTestException;
以下是Asynchronous接口的代码:
void postToRemoteServer(
final String serviceUrl,
AsyncCallback<String> callback);
最后,这是实现类的代码:
@Override
public String postToRemoteServer(String serviceUrl)
throws HelpDeskTestException {
try {
//dividing url into host: http://some.server
//path: a/path/in/it
//and parameters: this=that&those=others
int hostStart= serviceUrl.indexOf("//");
int pathStart= serviceUrl.substring(hostStart + 2).indexOf("/");
int parameterStart= serviceUrl.substring(hostStart + 2 + pathStart).indexOf("?");
final String serverHost= serviceUrl.substring(0, hostStart + pathStart + 2);
final String serverPath= serviceUrl.substring(hostStart + 3,
hostStart + pathStart + 2 + parameterStart);
final String serverParameters= serviceUrl.substring(hostStart + pathStart + 3 + parameterStart);
final URL url = new URL(serverHost);
final URLConnection connection= url.openConnection();
connection.setDoOutput(true);
final OutputStreamWriter out= new OutputStreamWriter(connection.getOutputStream());
final BufferedReader in= new BufferedReader(new InputStreamReader(
connection.getInputStream()));
out.write("POST " + serverPath + "\r\n");
out.write("Host: " + serverHost + "\r\n");
out.write("Accept-Encoding: identity\r\n");
out.write("Connection: close\r\n");
out.write("Content-Type: application/x-www-form-urlencoded\r\n");
out.write("Content-Length: " + serverParameters.length() + "\r\n\r\n" +
serverParameters + "\r\n");
String result = "";
String inputLine;
while ((inputLine=in.readLine()) != null) {
result+= inputLine;
}
in.close();
out.close();
return result;
} catch (final Exception e) {
throw new HelpDeskTestException();
}
任何帮助将不胜感激。
答案 0 :(得分:3)
调用服务时需要使用异步接口。您可以使用GWT.create()创建它的实例。假设您的异步接口名为“HelpDeskTestServiceAsync”,您可以执行以下操作:
HelpDeskTestServiceAsync asyncService = GWT.create(HelpDeskTestService.class);
asyncService.postToRemoteServer(
"http://xx.xx.xx.xx/sdpapi/request/",
new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
Window.alert("Failure getting XML through proxy");
}
@Override
public void onSuccess(String result) {
processXML(result);
}
});
答案 1 :(得分:0)
错误意味着参数表达式的类型与方法的形式参数的类型不匹配。
“HelpDeskTestService类型中的postToRemoteServer(String)方法不适用于参数(String,new AsyncCallback(){})”
这是说你试图使用两个参数postToRemoteServer
,但它被声明为一个参数。
目前还不完全清楚为什么会发生这种情况,但看起来就像你正在调用一个静态方法一样,如果是这种情况,接口就没有用了。
或者,如果HelpDeskTestService
是变量(tsk,tsk ...代码样式违规... tsk,tsk),则问题可能是变量的声明类型。如果您已将其声明为Synchronous
,那么该语言将不允许您使用Asynchronous
类型中的所有方法...除非Synchronous
扩展Asynchronous
。
答案 2 :(得分:0)
正是它所说的,你用String和ASyncCallback类型调用它。它只需要使用String调用。有关该方法的更多信息,请参阅该方法的API文档或“HelpDeskTestService”类。