1

我有一个 AsyncHttpClient 向 url 发出 get 请求。我将采用 onSuccess() 方法的响应。我粘贴我的代码以更好地解释..

CategoryActivity.java调用类“XMLParser”的getXML 方法。在此方法中,它是 AsyncHttpClient。

    XMLParser parser = new XMLParser(URL);
    xml = parser.getXML(URL);

XMLParser.java有 .getXML(url) 并返回一个字符串。我创建了一个变量 xmlResponse 来放置响应值,但它没有。

    public String getXML(String url) {
    // get connection..
    String xmlResponse = "";

    AsyncHttpClient client = new AsyncHttpClient();
    client.get(url, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            super.onSuccess(response);
            xmlResponse = response;
        }
        @Override
        public void onFailure(Throwable e) {
            ma.showUserAlertQuestion();
        }
    });
    return xmlResponse;
}

我怎样才能取回这个值?提前谢谢你,对不起我的英语不好。

4

2 回答 2

2

这实际上是一个竞争条件。无法获取值的xmlResponse原因是因为你的 HTTP 请求是一个异步方法,在它从服务器返回响应之前返回结果。

这个答案基本上解释了一切,要获得 的响应值onSuccess(),您需要使用一个接口:

public Interface XMLCallback {
    onSuccess(String response);
}

在您的解析器类中:

public String getXML(String url, XMLCallback callback) {
    AsyncHttpClient client = new AsyncHttpClient();
    client.get(url, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            super.onSuccess(response);
            callback.onSuccess(response);
        }
        @Override
        public void onFailure(Throwable e) {
            ma.showUserAlertQuestion();
        }
    });
}

在你的活动课上:

private String XMLResponse = "";

XMLParser parser = new XMLParser(URL);
xml = parser.getXML(URL, new XMLCallback() {
    @Override
    public void onSuccess(String response) {
        XMLResponse = response;
    }
});
于 2017-09-29T06:30:44.550 回答
0

在其他情况下,我也遇到了同样的问题。你可以在这里看到它:https ://stackoverflow.com/questions/21578458/return-asynch-data-to-method-android-java 我也在寻找解决方案,但目前没有找到。

返回值没有结果的原因很简单。当你这样做时: client.get() 消息被发送到服务器。比您的代码立即返回 xmlResponse。onSucces 方法将在返回后被调用,这是因为软件到达返回语句的速度比服务器返回的 Async 调用的消息要快。

在上面我向您展示的主题中,这是一个解决方案。但是那个解决方案不适合我计划我的应用程序的方式。也许它会适合您的应用程序。

于 2014-02-05T18:24:49.333 回答