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