如何获取AsyncHttpClient onSuccess值?

时间:2013-06-21 07:35:41

标签: android get return return-value android-async-http

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

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

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

XMLParser.java 具有.getXML(url)并返回一个String。我创建了一个变量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;
}

如何取回这个值? 提前谢谢你&抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

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

This answer基本上解释了一切,要获得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;
    }
});

答案 1 :(得分:0)

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

您没有获得返回值的原因很简单。执行以下操作时:client.get()将消息发送到服务器。比你的代码无法返回xmlResponse。返回后将调用onSucces方法,这是因为软件的返回语句比服务器返回的异步调用消息更快。

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