1

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

我试过谷歌搜索,但对我的发现没有任何意义。

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

这是来自异步接口的代码:

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();

    }

任何帮助将不胜感激。

4

3 回答 3

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);
                    }
                });
于 2012-10-03T15:09:32.490 回答
0

该错误意味着参数表达式的类型与方法的形式参数的类型不匹配。

“HelpDeskTestService 类型中的方法 postToRemoteServer(String) 不适用于参数 (String, new AsyncCallback(){})”

它是说您正在尝试postToRemoteServer使用两个参数,但它被声明为采用一个参数。

目前尚不完全清楚为什么会发生这种情况,但看起来您正在调用静态方法,如果是这种情况,接口就没有实际意义。

或者,如果HelpDeskTestService是一个变量(tsk, tsk ...违反代码风格... tsk, tsk)那么问题可能出在变量声明的类型上。如果您已将其声明为Synchronous,那么该语言将不允许您使用Asynchronous类型中的所有方法...除非Synchronousextends Asynchronous

于 2012-10-03T15:02:04.160 回答
0

正如它所说的,你用一个 String 和一个 ASyncCallback 类型来调用它。它只需要一个字符串来调用。有关其使用的更多信息,请参阅有关该方法的 API 文档或“HelpDeskTestService”类。

于 2012-10-03T15:02:15.237 回答