这个错误意味着什么:方法...不适用于参数

时间:2012-10-03 14:59:36

标签: java gwt

我是新手,我无法弄清楚这个错误意味着什么。

我已经尝试使用谷歌搜索,但从我发现的内容中无法理解。

我需要与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();

    }

任何帮助将不胜感激。

3 个答案:

答案 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”类。