我有一个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;
}
如何取回这个值? 提前谢谢你&抱歉我的英语不好。
答案 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方法,这是因为软件的返回语句比服务器返回的异步调用消息更快。
我在上面展示的主题是一个解决方案。但该解决方案不符合我计划应用程序的方式。也许它适合您的应用。