我有一个AsyncHttpClient,它向url发出get请求。我将接受方法onSuccess()的响应。我把我的代码粘贴到一个更好的解释。
CategoryActivity.java调用类的getXML方法"XMLParser“。在这种方法中,它是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;
}我怎么才能拿回这个价值?提前谢谢,对不起我的英语很差。
发布于 2017-09-29 06:30:44
这实际上是一种种族状况。无法获得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;
}
});发布于 2014-02-05 18:24:49
我在另一种情况下也有同样的问题。您可以在这里看到它:https://stackoverflow.com/questions/21578458/return-asynch-data-to-method-android-java,我也在寻找解决方案,但目前还没有找到。
返回值没有得到结果的原因很简单。当您这样做时: client.get()将消息发送到服务器。在返回xmlResponse时,您的代码是不可更改的。返回后将调用onSucces方法,这是因为软件到达返回语句的速度比服务器返回来自异步调用的消息更快。
在我向您展示的主题中,这是一个解决方案。但这个解决方案不适合我计划申请的方式。也许它适合你的申请。
https://stackoverflow.com/questions/17229989
复制相似问题