android - 如何获取 AsyncHttpClient 的 onSucces 值?

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

我有一个 AsyncHttpClient 向 url 发出获取请求。 我将采用 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;
}

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

最佳答案

这实际上是一个竞争条件。之所以取不到xmlResponse的值,是因为你的HTTP请求是异步方式,在服务器返回response之前返回结果。

This answer基本上说明了一切,要获取onSuccess()的响应值,需要用到一个接口(interface):

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

在你的 Activity 课上:

private String XMLResponse = "";

XMLParser parser = new XMLParser(URL);
xml = parser.getXML(URL, new XMLCallback() {
    @Override
    public void onSuccess(String response) {
        XMLResponse = response;
    }
});

关于android - 如何获取 AsyncHttpClient 的 onSucces 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229989/

相关文章:

http - wget - 下载一个文件 help.php,但有许多 HTTP GET 参数变体

android - 按下 'Return' 键时如何使 edittext 失去焦点?

android - Android 库中复合组件的自定义样式

android - 单击复选框时删除 AppCompatActivity 中的所有 fragment ?

javascript - 如何在一个函数中从 2 个 api 获取数据并在对话框流卡履行中显示

r - 使用 Amazon s3 API GET 请求正确下载文件的参数

c++ - 谁能解释一下为什么两个 "results"不同?

Java返回一个空列表

Android 自定义形状对话框

android - 为Javacv opencv android项目预编译的opencv库