我有一个名为webservice的类,它包含一个变量内容和一个名为getURL的方法,它将URL作为参数获取并获取数据并将其作为字符串返回。如下:
class WebService {
String content;
String getUrl(String url, final Context mContext) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(url, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Toast.makeText(mContext, "Sorry, Something Went Wrong While Connecting To Net :(", Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
content = responseString;
Log.i("RESPONSE STRING", responseString);
Log.i("COntent STRING", content);
}
});
Log.i("BEFORE RETURN",""+ content);
return content;
}
}
问题是方法返回null。 在onSuccess中,我查看"内容"并且值与responseString完全相同,但在返回之前的日志中它变为null。 你能告诉我为什么会这样吗? 感谢。
答案 0 :(得分:1)
顾名思义asynchronous Task
asynchronous
为class WebService {
public void getUrl(String url, final Context mContext, WebServiceCallback cb) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(url, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
cb.onFailure();
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
cb.onSuccess(responseString);
}
});
}
public interface WebServiceCallback{
void onFailure();
void onSuccess(String url);
}
}
。这意味着它将在完成后完成。其他所有事情都将照常进行,并不关心这项任务 - 除非你想从中获取一些东西。
您可以通过网络上的各种库实现这一目标,也可以通过回调自行完成。
e.g。
WebService service = new WebService();
service.getUrl("www.test.com", yourContext, new WebServiceCallback(){
@Override
public void onFailure(){}
@Override
public void onSuccess(String url){
yourAlreadyDeclaredString = url;
// do smth with it
}
});
你称之为
TextHttpResponseHandler
您也可以跳过此自定义回调并传递for (i in p.mat.all[c("t", "p", "r")]) {
...
}
,但这取决于您的设计。