【问题标题】:How to get AsyncHttpClient onSucces value?如何获取 AsyncHttpClient onSucces 值?
【发布时间】:2013-06-21 07:35:40
【问题描述】:

我有一个 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;
}

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

【问题讨论】:

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


    【解决方案1】:

    这实际上是一个竞争条件。无法获取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;
        }
    });
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多